美文网首页
JMS-ActiveMQ事务与签收方式-02

JMS-ActiveMQ事务与签收方式-02

作者: quanCN | 来源:发表于2019-06-23 17:29 被阅读0次

    添加事务

    1. 修改Session配置,启用事务
      /**
       * 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息。
       *   参数1:是否启用事务 
       *   参数2:签收模式,一般设置为自动签收
       */
      Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
      
    2. 提交事务
      //提交事务
      session.commit();
      
      注:如果没有提交或者有异常抛出,事务就回滚

    签收方式

    消息的签收情形分两种:

    • 带事务的session
      如果session带有事务,并且事务成功提交,则消息被自动签收。如果事务回滚,则消息会被再次传送。
      //创建会话 开启事务
      Session session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
      //more code...
      //提交事务
      session.commit();
      
    • 不带事务的session
      不带事务的session的签收方式,取决于session的配置。
      Activemq支持一下三种模式:
      • Session.AUTO_ACKNOWLEDGE 消息自动签收
        当客户端从receiver或onMessage成功返回时,Session自动签收客户端的这条消息的收条
      • Session.CLIENT_ACKNOWLEDGE 消息手动签收
        客户端调用acknowledge()方法手动签收
      • Session.DUPS_OK_ACKNOWLEDGE 不必必须签收
        在第二次重新传递消息的时候,消息头的JmsDelivered会被置为true标示当前消息已经传送过一次,客户端需要进行消息的重复处理控制。

    注:签收发生在Session层面,当前Session没有commit()或者没有确认签收时,其它连接仍然不能收到消息,只有当前连接close时另一个连接才可以收到消息

    相关文章

      网友评论

          本文标题:JMS-ActiveMQ事务与签收方式-02

          本文链接:https://www.haomeiwen.com/subject/rqkwqctx.html