Настройка конечной точки для работы в качестве рабочего и подписчика

StackOverflow https://stackoverflow.com/questions/1612581

  •  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 во входную очередь дистрибьютора.

Другой способ заключается в том, чтобы процесс, отправляющий запрос заказа, включал цены в запрос заказа.

Это имеет какой-то смысл?

/ Андреас

Другие советы

Работники дистрибьютора - это то, как вы масштабируете одного логического подписчика, а не то, как вы обрабатываете нескольких логических подписчиков. Дело в том, что только один работник из пула работников должен получить данное сообщение, и в этом случае вы хотите, чтобы все работники выглядели одинаково по отношению к издателю - вот почему указан адрес распространителя.

Если у вас есть несколько логических подписчиков, которых вы хотите масштабировать, назначьте каждому из них своего дистрибьютора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top