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

如何让RabbitMQ重新传递未确认的消息?

翟嘉祥
2023-03-14

我将不折不扣地学习以下教程:https://www.rabbitmq.com/tutorials/tutorial-two-java.html。

我以这样的方式启动RabbitMQ服务器:

docker pull rabbitmq
docker run -d --hostname my-rabbit-host --name my-rabbit -p 5672:5672 rabbitmq:3

我生成了两个消费者,当我Ctrl+C其中一个时,另一个正在运行的消费者不会接收到最初发往前一个消费者的消息。如何在Ctrl+C'ing从一个消费者中重新传递消息?

编辑:我现在正在通过'brew'安装RabbitMQ,但我仍然看到同样的问题。

brew update
brew install rabbitmq
/usr/local/sbin/rabbitmq-server &

共有1个答案

万俟玉书
2023-03-14

不需要在消费者代码中放入sleep或类似的东西。在您提供的链接上,搜索以手动消息确认开头的段落,并查看那里的代码。关键是不要承认这个消息。如果您将autoACK标志设置为true,那么您可以调用任何您想要的内容,消息一收到就会被确认。因此,不要设置该标志,为了进行测试,您可以注释掉channel.basicack(Envelope.getDeliveryTag(),false);行,以便不进行手动ACK。因此当使用者退出时,消息仍将在队列中。

 类似资料:
  • 问题内容: 我的Java应用程序将消息发送到RabbitMQ交换,然后交换将消息重定向到绑定队列。我将RabbitMQ与Springframework AMQP java插件一起使用。 问题:消息进入队列,但消息始终处于“未确认”状态,永远不会变为“就绪”状态。 可能是什么原因? 问题答案: 一条未确认的消息表示您的使用者已经读取了该消息,但是该使用者从未将ACK发送回RabbitMQ代理以表示它

  • 我正在处理一个套接字 IO 应用程序,该应用程序使用来自 ActiveMQ 队列的消息。我正在为节点JS使用踩踏库 在大多数情况下,它工作正常,但我需要能够重新发送未确认的消息。跳过 amq.ack(消息)的消息不会被重新尝试并显示为正在等待 ActiveMQ Web 控制台。有没有办法让我重新发送它们?

  • 我正在使用AWS sdk开发基于SQS的队列pub-sub。 在非常基本的原型中,我将消息并发地推送到我已经创建的队列中。但是,如何才能确定我的消息正在被推送到队列中呢?

  • 我读到:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2 "通常,确认特定消息会确认会话接收的所有先前消息"(在客户端确认模式下) “邮件重新传递不是自动的,但在某些情况下会重新传递邮件” 我的问题是: 如何确保每次收到消息时都有一个

  • 好吧,我不需要详细介绍我设置的整个系统, 我遇到的问题是,当使用者取消(amqpchannel->basic_cancel)对队列的监听时,会留下一个额外的消息未被这个工作者确认。它也不会触发正常的回调来处理此消息。 队列正在阻塞(使用wait) 预取为1,这是您所能拥有的最小值 使用者可以动态侦听() 使用者可以动态忘记() 我不会告诉给定使用者使用或取消给定队列的确切方式。但这一切都是完美的工

  • 我正在使用WerbLogic 10.3.5和Spring 3.0实现JMS队列。我有以下Spring配置: 我的消息创建代码如下所示: 我的听众是这样的: 消息被正确创建,侦听器的onMessage()方法被调用,但是如果逻辑失败,我抛出RuntimeException(),消息不会被重新传递。我尝试了上述代码的许多细微变化(例如设置SessionAcknowledgeMemodeName=SES