当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ:当消费者关闭时发布消息,以后的消费者不能在没有命名队列的情况下使用消息

景胜涝
2023-03-14

我有一个生产者和一个消费者。消费者的多个实例正在运行。当生产者发布消息时,我的意图是通过所有实例消费该消息。所以,我使用的是直接交换。生产者将带有主题的消息发布到直接交换。消费者正在通过独占队列收听该主题。当消费者启动并且生产者发布消息时,此过程运行良好。但是当消费者关闭并且生产者发布消息时,消费者在启动时不会消费此消息。

我在谷歌上搜索了这个问题。建议使用命名队列。但是,如果使用命名队列,则消息将按照循环算法使用。这不符合我的期望,即所有消费者都使用相同的消息。

还有其他解决方案吗?

感谢你的帮助。

共有1个答案

罗睿识
2023-03-14

你的问题有两个解决方案。

使用命名队列就是其中之一。将交换设置为扇出模式,并将指定队列订阅到该交换。这样,当发布者在您的交换中发送消息时,它将被调度到所有正在侦听的队列。

然后,您可以为每个队列拥有一个或多个消费者(允许您扩展)。您必须定义一个命名队列/消费者。当一个消费者断开连接时,他的队列仍然接收消息,当他回来时,他可以使用它们。

你应该能够以这种方式做你想做的事。

另一种方式更多的是你的个人知识,因为你说你想使用RabbitMQ。但是在这种特殊情况下,您可以使用Kafkha,然后您的消耗者可以在重新连接后,在他断开连接时恢复消息索引

如果不行请更新我:)

 类似资料:
  • 我有一种在shell中执行此任务的方法:如何使kafka消费者从上次消耗的偏移量读取,而不是从开始读取 但是,我愿意在Python中这样做,使用 我找不到任何关于这种情况的api。 http://kafka-python.readthedocs.io/en/latest/apidoc/KafkaConsumer.html

  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 消费者使用Spring的JavaConfig类如下: Kafka主题侦听器使用@KafkaListener注释,如下所示: 我的pom包括依赖项: 现在当我打包到war并部署到tomcat时,它不会显示任何错误,即使在调试模式下也不会显示任何错误,只是部署war什么都没有。 请帮助我了解是否缺少触发kafkalistner的某些配置。 谢谢Gary我添加了上下文。xml和web。xml,但我得到了

  • 我正在尝试让 kafka 消费者获取在 Java 中生成并发布到主题的消息。我的消费者如下。 consumer.java 当我运行上面的代码时,我在控制台中什么也看不到,屏幕后面的java producer程序正在‘AATest’主题下不断地发布数据。另外,在动物园管理员控制台中,当我尝试运行上面的consumer.java时,我得到了以下行 此外,当我运行指向 AATest 主题的单独控制台使用

  • D: \软件\Kafka\Kafka2.10-0.10.0.1\bin\windows 我使用上面的命令来消费消息,有什么我错过的吗?帮助我: 这个 那些是生产者和消费者......

  • 我对RabbitMQ很陌生,所以如果我的问题听起来很琐碎,请原谅。我想在RabbitMQ上发布消息,它将由RabbitMQ消费者处理。 我的消费者机器是一个多核机器(最好是azure上的工作者角色)。但QueueBasicConsumer一次推送一条消息。我如何编程来利用我可以同时处理多个消息的所有核心。 一种解决方案是在多个线程中打开多个通道,然后在那里处理消息。但在这种情况下,我将如何决定线程