messaging - 我应该如何为一个生产者和许多消费者设置 rebus

标签 messaging servicebus rebus

我正在浏览示例并阅读文档,但我仍然不确定如何为我的场景配置 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 并不重要。
  • rebus(或任何服务总线类型的解决方案)听起来很适合这里吗?
  • 我应该使用 pub/sub 还是普通的发送模式?如果消息一次只由一个端点处理,还是由多个端点处理,这一选择是否会产生影响?
  • 谁能给我指出一个很好的例子或解释如何设置这个场景?
  • 最佳答案

    我会一一回答你的问题:

  • rebus(或任何服务总线类型的解决方案)听起来很适合这里吗?

  • 是的,服务总线可以帮助您处理许多原本必须自己处理的东西(例如序列化、线程化等)。
  • 我应该使用 pub/sub 还是普通的发送模式?如果消息一次只由一个端点处理,还是由多个端点处理,这一选择是否会产生影响?

  • 在这种情况下,我觉得您需要一个 competing consumers任务分配的类型。

    这不是发布/订阅 - 发布/订阅意味着每个消息实例有 0..* 个消费者,但您希望每个任务只有一个接收者。因此,您会bus.Send在这种情况下的任务。
  • 谁能给我指出一个很好的例子或解释如何设置这个场景?

  • 我写了 several blog posts试图展示如何使用 Rebus 扩展处理工作负载,并提供不同支持传输的示例。

    通过查看帖子并使用例如,您应该很容易上手SQL Server 作为您的传输工具。

    关于messaging - 我应该如何为一个生产者和许多消费者设置 rebus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21629180/

    相关文章:

    sockets - ZMQ 客户端- worker 通信模式

    c# - Azure ServiceBus 在 Client.Receive() 上返回 null

    asp.net-mvc - 远程机器上的 Rebus MVC 订阅者

    c# - 总线实例生命周期和最佳实践

    synchronization - Rebus - 发送命令并等待处理程序

    logging - 记录到消息队列是个好主意吗?

    networking - 为什么 MQTT 被称为 "light weight"消息协议(protocol)?

    php - Mysql php获取与用户相关的对话中的最后一条消息

    C# Azure 设置第二个 ServiceBus 用于故障转移

    azure - 使用 Azure 上的 AppFabric 服务总线实现可靠的角色间通信,观察者模式