添加事务
- 修改Session配置,启用事务
/** * 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息。 * 参数1:是否启用事务 * 参数2:签收模式,一般设置为自动签收 */ Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
- 提交事务
//提交事务 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时另一个连接才可以收到消息
网友评论