发生错误时如何不使用JMS消息

时间:2019-03-07 08:06:01

标签: spring spring-boot jms activemq spring-jms

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

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

例如,尝试3次后是否有停止消耗的方法?

1 个答案:

答案 0 :(得分: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次,直到您上次提交为止。