Запуск множественных оркестровок из родительской оркестровки и передача им сообщений - PullRequest
0 голосов
/ 06 июля 2010

У меня есть ситуация, когда главная оркестровка отвечает за обработку сообщения. Эти сообщения принадлежат группе клиентов, оркестровка будет читать сообщения по мере их поступления, и для каждого нового идентификатора клиента, который он находит, он будет ускорять создание новой оркестровки, которая отвечает за обработку сообщений конкретного клиента. Я должен сохранить порядок сообщений по мере их поступления, поэтому вновь созданные оркестровки должны обработать имеющееся сообщение и ждать дополнительных сообщений от основной оркестровки.

Пробовал разные способы решения этой проблемы, но не смог успешно его реализовать. Я хотел бы услышать ваше мнение о том, как это можно сделать.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 июля 2010

Я не думаю, что вам нужна мастерская оркестровка для запуска суб-оркестровок.Я полагаю, вы не говорите о ведущей оркестрации, которая влияет на структуру конвоя.Итак, если это так, вот что я мог бы сделать.

Вот краткий пример здесь о том, как реализовать одноэлементную оркестровку.В этом примере показано, как настроить оркестровку, которая будет существовать только один раз.Все поступающие на него сообщения будут выстраиваться в порядке поступления и обрабатываться по одному.Ваш пример отличается тем, что вы хотите, чтобы это было сделано по идентификатору клиента.Это довольно просто.Продвиньте идентификатор клиента во входящем сообщении и добавьте его к типу корреляции.Теперь на каждого клиента будет только один экземпляр оркестровки.

Проблема с синглетонами заключается в следующем.Вы должны убить их в какой-то момент, или они будут жить вечно как обезвоженные оркестровки.Итак, вы должны иметь их конец.Вы можете сделать это, если для последнего клиента есть способ указать последнему сообщению о том, что пришло время умирать через атрибут или тому подобное.Если это невозможно, вам нужно установить таймер.Если сообщения не были получены в течение x секунд, прервите Orch.Это все легко сделать, но это может представить зомби.Зомби возникают, когда эта оркестровка находится в процессе выключения, когда приходит другое сообщение для этого клиента. Обычно это можно решить, сократив время ожидания.В любом случае, это приведет к случайному появлению зомби.

Записка с поля.Мы сделали это, и это действительно не очень хорошее долгосрочное решение.Мы получали обновления информации о клиентах, и мы должны были обеспечить обработку заказов.Мы применили этот синглтонный подход, и он был проблематичным с точки зрения проблемы зомби и исключения.Если оркестровка Singleton генерирует исключение, она блокирует обработку всех будущих сообщений для этого клиента.Так что - обрабатывать каждое возможное исключение.Реальное решение состояло бы в том, чтобы система дальнего конца проверяла метки времени из сообщений об обновлении и отбрасывала те, которые были старше, чем последнее обновление.Мы хотели пойти по этому пути, но принимающая система не хотела выполнять эту дополнительную работу.

0 голосов
/ 07 июля 2010

Звучит так, как будто вы хотите получить набор вложенных составов.Хотя может быть возможно заставить это работать, это будет ... ну, больно.В частности, моей первой заботой было бы обслуживание: любые изменения в процессе были бы болью в шее, и, что гораздо хуже, развертывание действительно, действительно было бы отстой.

Лично я бы действительно попыталсянайдите альтернативный способ реализации этого и по возможности избегайте автоколонн, но это во многом зависит от вашего конкретного сценария.

Несколько вопросов, если вы не возражаете:

  • Каковы ваши требования к оформлению заказа?Например, вам нужна только заказанная обработка для каждого клиента в одной входящей партии или между партиями?Если последнее, не могли бы вы обойтись без главной оркестровки и просто заставить один экземпляр конвоя на каждого клиента?Все еще не очень хорошо, но, скорее всего, многое упростит.

  • Каковы ваши требования к сбоям в отношении заказа?Должен ли он полностью прекратить обработку?Сохранить сообщение и продолжить?Как насчет повторных попыток?

  • Основан ли порядок заказов только на времени прибытия сообщения?Есть ли в сообщении что-нибудь, что вы могли бы использовать для внутреннего упорядочения, вместо того чтобы полагаться исключительно на время прибытия?

  • Что делает обработка отдельных сообщений?Требуется ли упорядочение только для обеспечения выполнения определенных предварительных условий при обработке определенного сообщения (например, сообщения представляют некоторую древовидную структуру, которая требует, чтобы родители обрабатывались до дочерних элементов).

...