Настройка конечной точки для работы в качестве рабочего и подписчика
-
06-07-2019 - |
Вопрос
Можно ли настроить конечную точку так, чтобы она выполняла функции рабочего, извлекающего задания у дистрибьютора и подписывающегося на какие-то сообщения?
У меня есть следующий сценарий (адаптированный к терминологии продаж)
*) центральный департамент время от времени публикует список новых цен. Все работники должны быть уведомлены. Это означает, что работник должен подписаться на это событие.
*) когда в центральный офис поступает новый заказ, он отправляет его дистрибьютору, который отправляет его следующему неработающему работнику для обработки. Это означает, что рабочий должен быть настроен на получение сообщений от дистрибьютора. Я использую следующую конфигурацию:
<MsmqTransportConfig
InputQueue="worker"
ErrorQueue="error"
NumberOfWorkerThreads="2"
MaxRetries="5"
/>
<UnicastBusConfig
DistributorControlAddress="distributorControlBus"
DistributorDataAddress="distributorDataBus" >
<MessageEndpointMappings>
<add Messages="Events" Endpoint="messagebus" />
</MessageEndpointMappings>
</UnicastBusConfig>
Когда я настраиваю его только как рабочий или только как подписчик, все работает как положено, но не тогда, когда я настраиваю его как оба.
Я обнаружил, что в очередь ввода централизованного сообщения поступает сообщение с адресом распространителя в качестве адреса возврата вместо рабочего адреса, и в этом случае издатель не распознает подписчика. Есть идеи? Заранее спасибо.
Решение
Рабочие не должны использоваться таким образом, IFAIK. Я думаю, что путь будет состоять в том, чтобы ваш центральный подписчик на цены и когда «NewOrderMessage» quot; приходит, обогащает эти данные требуемыми ценами (возможно, только ценами на продукты в данном конкретном порядке) и отправляет новый ProcessOrderRequest во входную очередь дистрибьютора.
Другой способ заключается в том, чтобы процесс, отправляющий запрос заказа, включал цены в запрос заказа.
Это имеет какой-то смысл? Р>
/ Андреас
Другие советы
Работники дистрибьютора - это то, как вы масштабируете одного логического подписчика, а не то, как вы обрабатываете нескольких логических подписчиков. Дело в том, что только один работник из пула работников должен получить данное сообщение, и в этом случае вы хотите, чтобы все работники выглядели одинаково по отношению к издателю - вот почему указан адрес распространителя.
Если у вас есть несколько логических подписчиков, которых вы хотите масштабировать, назначьте каждому из них своего дистрибьютора.