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

将未确认的消息(异常时)放入RabbitMQ中的不同队列

龙晟睿
2023-03-14

在处理来自RabbitMQ的消息时发生异常,我只想取消确认并将特定消息放回差异队列,或者重新排队到相同队列,或者完全丢弃消息(根据basicNack中的最后一个布尔标志@requeue)。

public class My***Listener implements ChannelAwareMessageListener{

try{

    @Override
    public void onMessage(Message message,Channel channel) throws Exception {   
    String s = new String(message.getBody());
    //some logic
    //after successful ack manually
    channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
    }
catch(Exception e){
      //currently on exception i am unack the channel
      channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false);
}

共有1个答案

傅正豪
2023-03-14

你可以把它们送到死信队列。这是一个相当标准的模式

https://www.rabbitmq.com/dlx.html

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

  • 我将与一起使用中的这个库。所有使用者均为,所有队列均为(4小时)。 我有很多队列没有任何挂起的ack,但仍然保存着数百条消息。此外,队列不会在应该过期时过期,这将在几天后产生性能问题。我没有找到任何理由来解释为什么消息在ack处理之后仍然在队列中。 谢谢 管理工具中的一些快照:

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

  • 以前我读取队列中的所有消息,但现在我必须根据用户的选择返回特定数量的消息(计数)。 我试着相应地改变for循环,但是由于自动应答,它读取了所有的消息。所以我尝试在配置文件中将它改为手动。 在我的程序中,如何在读取 msg 后手动确认消息(目前我正在使用 AmqpTemplate 接收,我没有频道的参考)? 任何帮助都是非常值得赞赏的,提前表示感谢。

  • 在队列选项卡的rabbitMQ web界面上,我看到了“概述”面板,我在其中找到了以下内容: 排队消息: 准备好了 未确认 总数 我猜“总数”是多少。但什么是“准备就绪”和“未确认”?“准备好了”——传递给消费者的信息?“未确认”-? 消息费率: 发表 交付 重新交付 承认 这些信息是什么?尤其是“重新交付”和“确认”?这是什么意思?

  • 我将不折不扣地学习以下教程:https://www.rabbitmq.com/tutorials/tutorial-two-java.html。 我以这样的方式启动RabbitMQ服务器: 我生成了两个消费者,当我Ctrl+C其中一个时,另一个正在运行的消费者不会接收到最初发往前一个消费者的消息。如何在Ctrl+C'ing从一个消费者中重新传递消息? 编辑:我现在正在通过'brew'安装Rabbi

  • 我在Weblogic 12c上部署了一个MDB,它从JMS队列(UDQ)读取消息。MDB正在读取消息,但它没有从JMS队列中删除,这导致消息被重复读取。所以,我想知道MDB何时确认JMS队列它成功读取了消息,并且队列应该删除该消息。

  • 我有交换和排队。生产者不需要消费确认,但在某些情况下,由于缺乏其他数据,消费者在当前时刻可能无法处理消息。因此,我想将这些消息返回到队列的末尾。怎么做?还是在我拒绝邮件时自动完成? 流量: Message1被使用并在数据库中创建一些记录 所以存在消息排序问题,在一般情况下,我会按顺序获取消息,因为大多数组件都能正确地传递消息。我想解决一个潜在的问题,当Message1的制作人由于负载过重或其他原因