Jon*_*Jon 5 messaging servicebus rebus
我正在浏览示例并阅读文档,但我仍然不确定如何为我的场景配置rebus(或者使用总线是一个很好的选择).
我有一个要做的任务生产者,比如说ImportOrder和CalculateOrderPrice
我想从生产者转储消息并将大量这些消息排队.我想要两个侦听ImportOrder的客户端和10个侦听CalculatePriceOfOrder的客户端.我不希望同一个订单同时转到多个端点,我正在尝试分散工作量.
到目前为止生产者配置:
<rebus inputQueue="publisher.input" errorQueue="publisher.error" workers="1" maxRetries="5">
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
目前消费者配置:
<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>
Run Code Online (Sandbox Code Playgroud)
Configure.With(adapter)
.Logging(l => l.Log4Net())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.CreateBus()
.Start();
adapter.Bus.Subscribe<RecalculateContractMessage>();
Run Code Online (Sandbox Code Playgroud)
我似乎无法配置此设置,如果我使用msmq或sqlserver并不重要.
我来一一回答你的问题:
是的,服务总线可以帮助您处理很多事情(例如序列化、线程化等),否则您必须以某种方式自己处理这些事情。
在这种情况下,在我看来,您需要一种竞争性消费者类型的任务分配。
这不是 pub/sub - pub/sub 意味着每个消息实例有 0..* 个消费者,但您希望每个任务只有一个接收者。因此,您将完成bus.Send本例中的任务。
我写了几篇博客文章,试图通过不同支持的传输的示例来展示如何使用 Rebus 扩展工作负载的处理。
通过查看帖子并使用例如 SQL Server 作为传输工具,您应该相当容易开始。
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |