我有一项服务需要在多台机器上运行,从单个队列中挑选作业,确保每个作业仅由单个服务承担。我还需要发布消息以供所有服务接收,例如重新加载触发器。
在没有太多黑客攻击的情况下,这可能在 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>