RabbitMQ:将消息路由到线程

时间:2016-07-30 01:39:39

标签: ruby rabbitmq amqp

我有一个用Ruby编写的应用程序,它有多个线程,每个线程都向远程AMQP端点发送请求。当必须运行新任务时,会不时产生这些线程。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

如果您需要将消息留在队列中直到处理它的某些内容,那么您需要有一个持久的队列来处理消息。

每个线程都不需要使用rabbitmq。

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

鉴于此,您可以为每个线程创建一个通道,并且可以从同一(或不同)队列中使用多个通道而不会出现问题。

只要您将频道限制在一个线程中,您就可以根据所需的队列执行任何操作。