NServiceBus - Приложение в качестве абонентского и рабочего сервиса - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть служба, которая должна работать на нескольких машинах, выбирая задания из одной очереди, чтобы каждое задание выполнялось только одной службой. Мне также нужно публиковать сообщения для всех служб, таких как триггеры перезагрузки.

Возможно ли это в nservicebus без особого взлома?

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

Вот файлы конфигурации, которые у меня есть:

Publisher (все службы должны получать эти сообщения), использует Bus.Publish <...> (...):

  <MsmqTransportConfig InputQueue="ConfigQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<!-- Message publishers don't require message queues -->
<MessageEndpointMappings />  </UnicastBusConfig>

Отправитель (их может забрать только один сервис), использует Bus.Send <...> (...):

  <MsmqTransportConfig InputQueue="BrokerQueue" ErrorQueue="error" numberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
  <add Messages="EventMessage, Messages" Endpoint="AgentQueue" />
</MessageEndpointMappings>  </UnicastBusConfig>

Службы (каждая из них имеет одинаковое имя локальной очереди и подписывается на издателя выше):

  <MsmqTransportConfig InputQueue="AgentQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig>
<MessageEndpointMappings>
  <add Messages="NServiceBus.Messages.ReloadMessage, NServiceBus.Messages" Endpoint="ConfigQueue" />
</MessageEndpointMappings>  </UnicastBusConfig>

1 Ответ

1 голос
/ 21 декабря 2009

Балансировка нагрузки между различными машинами осуществляется с помощью распространителя, поставляемого с NServiceBus. (удаленное чтение транзакций в MSMQ некорректно и не рекомендуется)

Таким образом, все, что вы отправляете, попадет в одну и ту же очередь ввода, в вашем случае BrokerQueue. Затем вы должны сконфигурировать распространителя для подачи этой очереди.

Подробнее о настройке дистрибьютора можно узнать здесь:

http://tech.groups.yahoo.com/group/nservicebus/message/2009

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...