`
liyixing1
  • 浏览: 939816 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

jms-事物

    博客分类:
  • jms
阅读更多
JMSRedelivered可以检查消息是否被重新发送。

消息确认,通过message.acknowledge();此方法只能在CLIENT_ACKNOWLEDGE模式使用。

该方法的调用,会造成对之前所有的未确定的消息的确定。
另外也可以调用session的recover()方法,来强制要求JMS server重新发送之前未确定的消息。onMessage的运行失败,如抛出异常,也会造成JMS对之前未确定的消息的重新发送。

对于消息组而言,为了防止在点对点模式中,一个组的消息被不同的消费者分别接收,那么可以通过设置
msg.setStringProperty("JMSXGroupID", "GROUP1");

JMSXGroupID属性是JMS标准定义的。它是用来保证,相同的JMSXGroupID的消息被相同的消费者使用。JMS会根据系统已经分配过的消费者的GROUPID来对比,如果存在那么消息就发送给这个消费者,如果不存在,JMS会从消费者中选取一位,并为这位消费者分配该ID。
还有一个int的JMSXGroupSeq属性,是支持消息在组的序列号。这个消息是可选的。

事物是有jmsserver提供的,而不是JTA。
JMS事物包括了发送者的事物和接收者的事物。


事物的使用
TopicSession session =
connect.createTopicSession(true, Session.AUTO_ACKNOWLEDGE);
第一个参数true要开启事物。

session三个方法
session.rollback()
session.commit()
session.getTransacted()这个方法获取boolean,来确实是否session开启了事物。


连接丢失,JMS是经量自动进行重连,如果无法完成重新连接,会通知客户端。客户端通过接口
public interface ExceptionListener {
void onException(JMSException exception);
}
来监听该通知。
该通知有两种情况
1.JMS服务器重新完成了连接,那么不需发送通知
2.没有完成连接,那么JMS客户端运行时,会产生该通知。

收到该通知后,jms客户端其实可以进行重新连接操作

停用消息队列
Dead Message Queue (DMQ),非JMS标准定义,很多厂商自己实现。DMQ的空间有限,在选择JMS中间件的时候,需要了解该中间件是否支持DMQ,如果支持,就需要编写部分处理DMQ的代码,来防止DMQ空间被填满。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics