2009-12-21 65 views
0

我有一项服务需要在多台机器上运行,从一个队列中选择工作,以确保每项工作只能由一项服务执行。我还需要发布所有要接收的服务的消息,例如重新加载触发器。NServiceBus - 作为订户和工作者服务的应用程序

这可能在nservicebus没有太多的黑客?

我已经证明发布模型和发送模型都适用于我,但只要我的客户端需要处理这两种体系结构,它都将它们视为发送体系结构,而不是所有服务都接收发布方法。

下面是配置文件我到目前为止:

出版商(所有服务都需要接收这些邮件),使用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> 
+0

我发现了一个类似的问题,所以会把我的问题在那里: http://stackoverflow.com/questions/1612581/cofiguring-an-endpoint-to-act-both-as-worker-and - 订阅者 – theGecko 2009-12-22 09:14:05

回答

1

不同机器之间的负载平衡是通过NServiceBus附带的分配器完成的。 (远程事务读取在MSMQ上是片状的,并且不推荐)

因此,您发送的所有内容都将转到相同的输入队列BrokerQueue。然后,您将配置分销商以供应该队列。关于如何配置经销商

更多信息可以在这里找到:

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

希望这有助于!

+0

感谢你这么做,我让发行商按照该帖子中的描述工作,但仍然无法让工作人员订阅所有工作人员的广播消息。发布而不是发送到分布式数据队列会导致单个工作人员拾取邮件,就像在分发器体系结构的同时尝试发布/订阅体系结构一样。 – theGecko 2009-12-21 22:34:43

相关问题