【问题标题】:RabbitMQ: retrieve specific messages from the queueRabbitMQ:从队列中检索特定消息
【发布时间】:2012-10-21 00:33:12
【问题描述】:

我无法理解 RabbitMQ 中的路由。考虑我有几个生产者(我们称他们为客户端),它们向队列生成消息。例如,客户端 ABC 将消息发送到队列 @9​​87654324@。

让消费者响应所有将响应发送回队列的消息。例如,消费者从队列X1 中获取消息,做一些事情,然后将响应发送到队列X1

客户端A如何确定队列中X1发送给它的消息的位置以及发送给客户端BC的消息在哪里?

我无法为每个连接声明一个队列,因为预计会有大量连接 (~10^6)。所以我在这里遇到了麻烦。有什么建议?谢谢。

【问题讨论】:

  • 建议你去掉路由标签。您指的是 MQ 中的路由,而不是网络路由。它们不是一回事,标签所指的路由是网络路由。
  • 我在这里无法理解您的问题。我不确定 X2 与问题的其余部分的相关性,与 DE 和 F 类似。我还认为您可能需要重新阅读 RabbitMQ 网站上的教程,因为路由只有在您的生产者发送和交换时才会真正发生消费者从绑定到该交换的队列中消费。
  • 我阅读了一堆关于 AMQP 和 RabbitMQ 本身的教程。说清楚:忘记客户DEF 和队列X2。三个客户端ABC 向交换机发送消息,类型为amq.topic。这三个消息路由到队列X1。消费者处理所有消息并将响应发送回此交换。响应路由到队列X1。现在三个客户端中的每一个都需要从队列中获取消息。所以客户端A想要消息发送给它,客户端B - 消费者发送给B的消息等等。这怎么做?
  • 我认为你应该重写你的问题,而不是在你的评论中发布这么大的变化

标签: rabbitmq amqp


【解决方案1】:

我认为您需要查看RPC 教程。根据您的描述,这听起来像是您想要做的。但是,这可能需要您声明比您想要的更多的队列。

以不同的方式解决这个问题。我不明白为什么您不仅要通过同一个交换器,而且还要通过消费者正在消费的同一个队列向生产者发送回复。

让生产者 P1、P2 和 P3 使用路由密钥“abc.aaa.xyz”/“abc.bbb.xyz”/“abc.ccc.xyz”发送到交换 X1 是否没有意义。然后使用绑定键“.aaa.”/“.bbb.”/“.ccc.”将队列 Q1、Q2 和 Q3 绑定到 X1 >”或者只是带有绑定键“abc.*.xyz”的Q1(我不清楚你到底想要什么,所以只是提出一些建议)。由消费者 C1、C2 和 C3 消费

当消费者处理完消息后,它会向 X2 发送一条消息,并带有标识自己的路由键。生产者将从绑定到 X2 的队列中消费。

我要说明的一点是,您不希望多个消费者从队列中读取。只有一种情况是您想要的,那就是任务队列。我不清楚您的用例,因此您可能需要一个任务队列。如果你这样做了,那么你不应该让你的生产者和你的消费者从同一个任务队列中读取数据。除了任务队列之外,您还应该让一个消费者从一个队列中读取。一个交换器可能有多个队列,甚至一个队列到一个交换器有多个绑定。

希望对你有帮助

【讨论】:

  • 您的解决方案(有两个交易所X1X2)是否需要与客户端数量一样多的队列?如果是,那么它不适合我:期望的客户太多。我没有足够的资源来为每个连接提供一个(或多个)队列。如果不是,我不明白两个或多个客户端如何从所有客户端的消息放在一起的(唯一)队列中获取消息。当然,我们可以获取消息,检查它是否是我们的消息,如果不是,则将其推回队列。回过头来,这是我能想到的最糟糕的主意。
  • 基本上每个连接都需要一个队列。你怎么确定你不能支持每个客户一个队列。如果您可以支持客户端连接,那么您应该也可以支持他们的队列。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
相关资源
最近更新 更多