【问题标题】:Where are unique ReceiveFrom addresses really necessary on MassTransit with RabbitMQ?使用 RabbitMQ 在 MassTransit 上真正需要的唯一 ReceiveFrom 地址在哪里?
【发布时间】:2013-11-01 16:21:22
【问题描述】:

背景

总的来说,我的团队完全是 MassTransit 和消息传递的新手。我了解在网上找到的简单演示,但我对如何为非平凡的场景进行设置感到困惑。 (许多生产者,许多消费者,消费者与生产者交流)

我们目前通过同步调用直接从网络代码进行第 3 方网络服务调用。其中一些是出了名的缓慢和不可靠的浏览器超时和 YSOD,这不是我们代码的直接错误。我们希望将这些同步调用替换为消息和重试和毒队列的最终一致性。

我们还想用消息代替各种计划/批处理任务,以更接近实时处理,而不是等待下一个批处理运行。

我们的网站在硬件负载平衡器后面的 6 台 IIS 服务器场上运行。有 2 个额外的“应用程序”服务器运行计划任务。我想我们会将我们的新工作服务放在应用服务器上,甚至可能放在所有 8 台服务器上。

问题

所以... MT 文档的“常见问题”部分说每个应用程序都需要它自己的地址。我的问题是,在这种情况下,应用程序的确切定义是什么。

我有 6 台网络服务器运行该网站。这些中的每一个都需要一个唯一的地址,还是它们都只是“rabbitmq://localhost/MyApp/Website”。如果为多个工作进程配置 IIS 会怎样?每个都需要不同的兔子地址吗?

我的 2 台应用服务器也有同样的问题。如果我在两个盒子上运行同一个工人,它需要不同的地址吗?有些东西说如果您希望竞争的消费者共享一个地址,但如果您希望将“事件”类型的消息传递给每个人,则它们需要是不同的地址。

如果您需要将事件(广播)和命令(消费一次)消息发送到工作集群,该怎么办? (同一个工人的多个实例来处理更多的负载。)

如果我将消费者直接托管在 Web 应用程序中怎么办? (我不确定这是一个好主意。)

请求/响应消息呢?我认为响应应该返回到原始 Web 服务器。否则 MT 请求调用将永远不会解除阻塞或最多超时。

【问题讨论】:

    标签: rabbitmq masstransit


    【解决方案1】:

    IServiceBus 的每个实例都需要它自己的 RecieveFrom 地址。是的,如果有多个工作进程,每个工作进程都应该有自己的队列。您可以在 Web 应用程序中为此使用临时队列。

    对于竞争消费者,作为消费者之一的每个进程/IServiceBus 应该是一个精确的副本。如果有一个事件不需要竞争,那么它需要有自己的流程。

    【讨论】:

    • 临时队列是什么意思?只是在启动过程中粘贴一个新的 GUID 或其他东西?
    • 对于 RabbitMQ,使用 rabbitmq://localhost/*?temporary=true 作为临时队列
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2011-08-26
    • 2012-06-02
    • 2015-10-19
    • 2017-03-09
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多