我正在浏览示例并阅读文档,但我仍然不确定如何为我的场景配置 rebus(或者使用总线很合适)。
我有一个任务生产者要做,比如说 ImportOrder 和CalculateOrderPrice
我想转储来自生产者的消息并将大量这些消息排队。
我想要两个监听 ImportOrder 的客户端,和 10 个监听CalculatePriceOfOrder 的客户端。我不希望同一个订单同时到达多个端点,我试图分散工作量。
到目前为止的生产者配置:
<rebus inputQueue="publisher.input" errorQueue="publisher.error" workers="1" maxRetries="5">
var adapter = new BuiltinContainerAdapter();
Configure.With(adapter)
.Logging(l => l.Log4Net())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.Subscriptions(s => s.StoreInXmlFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "rebus_subscriptions.xml")))
.MessageOwnership(d => d.FromRebusConfigurationSection())
.CreateBus()
.Start();
到目前为止的消费者配置:
<rebus inputQueue="calcserver1.input" errorQueue="calcserver1.error" workers="1" maxRetries="5">
<endpoints>
<add messages="Messages.RecalculateContractMessage, Messages" endpoint="publisher.RecalculateContract@se-devws-0007.sirius.local"/>
</endpoints>
Configure.With(adapter)
.Logging(l => l.Log4Net())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.CreateBus()
.Start();
adapter.Bus.Subscribe<RecalculateContractMessage>();
我似乎无法配置此设置,使用 msmq 或 sqlserver 并不重要。
最佳答案
我会一一回答你的问题:
是的,服务总线可以帮助您处理许多原本必须自己处理的东西(例如序列化、线程化等)。
在这种情况下,我觉得您需要一个 competing consumers任务分配的类型。
这不是发布/订阅 - 发布/订阅意味着每个消息实例有 0..* 个消费者,但您希望每个任务只有一个接收者。因此,您会
bus.Send
在这种情况下的任务。我写了 several blog posts试图展示如何使用 Rebus 扩展处理工作负载,并提供不同支持传输的示例。
通过查看帖子并使用例如,您应该很容易上手SQL Server 作为您的传输工具。
关于messaging - 我应该如何为一个生产者和许多消费者设置 rebus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21629180/