У меня есть служба, которая должна работать на нескольких машинах, выбирая задания из одной очереди, чтобы каждое задание выполнялось только одной службой. Мне также нужно публиковать сообщения для всех служб, таких как триггеры перезагрузки.
Возможно ли это в 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>