RabbitMQ:将消息路由到线程

RabbitMQ: routing messages to threads

我有一个用 Ruby 编写的应用程序,它有多个线程,每个线程都将请求发送到远程 AMQP 端点。当新任务必须 运行.

时,会不时产生这些线程

如果我使用每个线程的临时排他队列来发送对其请求的响应,那么编写代码来处理此 Ruby 服务中的传入消息就变得容易了。一旦关联的频道关闭,队列就会被删除,因此它们不会在其目的结束后停留。

我能想到的所有替代方案都需要一个侦听器线程侦听一个或多个队列,这些队列将所有传入消息/响应接收到 Ruby 服务中,然后使用一些消息标识符将这些消息路由到等待线程.这看起来更复杂,而且我无法使用 RabbitMQ 进行所有必需的语义路由。

第一个模型是 AMQP 通信的可行模型吗?有没有更好的模式来处理这种情况?

答案很大程度上取决于您的用例

如果您不关心删除给定队列时丢失消息,那么第一个选项就可以了。

如果您需要消息在队列中停留直到有东西处理它,那么您需要有一个持久的队列来存放消息。

使用 rabbitmq 不需要每个线程的队列。

但是,您应该为每个线程使用一个通道。

鉴于此,您可以让每个线程有一个通道,并且可以让多个通道从相同(或不同)的队列中消费而不会出现问题。

只要您将通道限制在单个线程内,您就可以对正在使用的队列做任何您需要的事情。