1

背景

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

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

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

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

问题

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

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

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

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

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

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

4

1 回答 1

2

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

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

于 2013-11-01T18:57:52.983 回答