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

Spring Rabbit:Acknowledge mode=Manual with RetryTemplate不会从队列中删除消息

洪雨石
2023-03-14
    null

但它不会从Q1中删除消息。

public void onMessage(Message message, Channel channel) throws Exception {
        try {
            validateMessage();

            processMessage(message);
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
        }
        catch (DataValidationException ex){
            channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);

        }
        catch(DownstreamAppException ex) {
            channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);
            throw ex;
        }
    }

    void validMessage() {
        ..
        throw new DataValidationException();
    }

    void processMessage() {

        ...
        throw new DownstreamAppException();
    }

我不想请求验证失败的消息,但想请求那些由于下游应用程序失败而没有处理的消息进行重试。

几个问题:1。如果我没有在DownstreamAppException的catch中抛出异常,则消息不会抛出retryTemplate和Recoverer。是因为请求被拒绝的消息是一条新消息吗?

谢谢

共有1个答案

丌官丰羽
2023-03-14

当使用手动acks时(不管是否重试),您要负责ACK。如果您的代码永远无法访问,则消息(最终)将被请求;但您无法访问恢复器中的通道。

真正的问题是为什么要使用手动acks和ChannelAwareMessageListener?您的用例很简单。使用自动ackmode,容器将在成功时ack消息,并在任何异常时拒绝消息。

由于恢复程序重新发布消息,这被认为是成功的,并且消息将被容器ACK。

 类似资料:
  • 但我的却不是这样。他们正在处理OK,并将正在编码的视频保存到正确的S3存储桶中。但它们没有像应该的那样删除队列项。 我试过用各种方法发送报头,包括... 我在页面上没有输出,但尝试调用了ob_start();在起始和ob_end_flush()处;在发送报头之后,甚至尝试在任何处理之前一开始就直接执行报头。没有任何工作,消息仍然在飞行中,并在其可见性超时结束后重新传递。 救命啊! 多谢了。

  • 我最近将一台服务器从ActiveMQ从5.8升级到了最新版本(5.11.1)。从那以后,我偶尔注意到,消息将在特定队列中累积,而不会被删除。 我们的架构有一个生产者,一个消费者。我可以看到消费者仍然保持联系,但制作人的信息越来越多。我的解决方案是通过web控制台删除队列。之后,我立即看到消费者重新连接,消息再次开始处理。 如果相关,在这种情况下,生产者正在运行NMS。NET和消费者在Java 1.

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无

  • MessageProducer.java public void sendMessage(最终字符串responseStream){ SampleJMSConsumer.java

  • 如何从weblogic JMS队列中清除/删除消息 我的是一个集群环境,在服务中使用。 获取以下异常。

  • 当我更改ListViewAdapter时,我的项目将无法从ListView中清除,并且我有一些空白条目。 她是我的密码: