【问题标题】:How to not consume JMS message when an error happen发生错误时如何不使用 JMS 消息
【发布时间】:2019-07-29 01:09:23
【问题描述】:

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

  • 有消息进来
  • 我在我的一个消费者中引发了运行时异常
  • 我希望该消费者再次尝试使用相同的消息,但它会直接转到下一条消息。

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

【问题讨论】:

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


    【解决方案1】:

    您可以创建一个事务处理的 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 次,直到你最后一次提交它。

    【讨论】:

    • 听起来很有趣,你有这种做法的例子吗?
    • 看起来不错,我试试看。非常感谢
    • 通过将 session.commit 移动到“else”块来编辑答案。否则 session.commit 会被不必要地调用
    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 2021-04-02
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多