使用RabbitMQ在MassTransit上真正需要的唯一ReceiveFrom地址在哪里?

时间:2013-11-01 16:21:23

标签: rabbitmq masstransit

背景

我的小组是MassTransit和消息传递的完整新手。我理解在线发现的简单演示,但我对如何为非平凡场景进行设置感到困惑。 (许多生产者,许多消费者,消费者与生产者沟通)

我们目前通过同步通话直接从网络代码拨打第三方网络服务电话。其中一些是非常缓慢和不可靠的浏览器超时和YSODs不直接我们的代码的错。我们希望将这些同步调用替换为重试和毒性队列的消息和最终一致性。

我们还希望用消息传递替换各种计划/批处理任务,以便更接近实时处理,而不是等待下一批运行。

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

问题

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

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

同样的问题适用于我的2个应用服务器。如果我在两个盒子上运行相同的工作人员,它是否需要不同的地址?有些东西说如果你想让竞争的消费者共享一个地址,但是如果你想要将“事件”类型的消息传递给每个人,他们需要成为不同的地址。

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

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

请求/回复消息怎么样?我假设响应应该返回到原始Web服务器。否则,MT请求调用将永远不会解除阻塞或最多超时。

1 个答案:

答案 0 :(得分:2)

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

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