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

添加事务

  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)