【问题标题】:RabbitMQ: routing messages to threadsRabbitMQ:将消息路由到线程
【发布时间】:2016-07-30 01:39:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby rabbitmq amqp


    【解决方案1】:

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

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

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

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

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

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

    只要您将频道限制为单个线程,您就可以根据您正在消费的队列做任何您需要的事情。

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多