开发者

NServiceBus - Application as subscriber and worker service

开发者 https://www.devze.com 2022-12-14 08:12 出处:网络
I have a service which needs to run on multiple machines picking jobs off of a single queue ensuring each job is only undertaken by a single service. I also need to publish messages for all services t

I have a service which needs to run on multiple machines picking jobs off of a single queue ensuring each job is only undertaken by a single service. I also need to publish messages for all services to receive, such as reload triggers.

Is this possible in nservicebus without too much hacking?

I have proved that both the publish model and send model work for me but as soon as my client needs to deal with both architectures, it treats them all as a send architecture and not all services receive the publish methods.

Here are the config files I have so far:

Publisher (all services need to receive these messages), uses Bus.Publish<...>(...):

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

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

Sender (only one service can pick these up), uses Bus.Send<...>(...):

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

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

Services (each have the same local queue name and subscribe to the publisher above):

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

  <UnicastBusConfig>
<MessageEndpointMappings>
  <add Messages="NServiceBus.Messages.ReloadMessage, NServiceBus.Messages" Endpoint="ConfigQueue" />
</MessageEndpointMappings>  &开发者_Python百科lt;/UnicastBusConfig>


Load balancing between different machines is accomplished with the Distributor that comes with NServiceBus. (remote transactional reads are flaky on MSMQ and is not recommended)

So all you sends would go to the same input queue, BrokerQueue in you case. You would then configure the distributor to feed of that queue.

More info on how to configure the distributor can be found here:

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

Hope this helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消