发生错误时如何不消耗JMS消息

问题描述 投票:0回答:1

我正在创建一个包含多个消费者的主题,每个消费者都由clientId标识。我看到的行为是:

  • 一条消息进来了
  • 我在我的一个消费者中抛出一个运行时异常
  • 我希望这个消费者尝试再次消费相同的消息,但它会直接进入下一个消息。

有没有办法在3次尝试后停止消费?

spring spring-boot jms activemq spring-jms
1个回答
2
投票

您可以创建一个事务处理的JMS会话:

// create JMS Session from JMS Connection
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

并使用Session.rollback()方法指示您需要再次看到该消息:

  public void onMessage(Message message)
  {
      msgsReceived++;
      System.err.println("received: " + message);
      if( msgsReceived<3 ) { // simulating an error case

        session.rollback();
      } else {
        session.commit();
      }

然后你应该看到这个消息3次,直到你最后一次提交它。

© www.soinside.com 2019 - 2024. All rights reserved.