WebSphere MQ和Atomikos公司 - 遗失的进程终止的消息(WebSphere MQ

2019-09-22 13:01发布

我的应用程序(一个弹簧消息侦听器)从队列中读取,并在单个事务中写入数据库。 我用Atomikos公司提供XA交易行为。 当应用程序突然与例如杀语句结束,我看到的消息都将丢失。 有没有具体的配置我需要使用? 如果队列是永久的? 目前,队列的非持久性。 我的MQ版本是V7.1。

对于监听器容器Spring配置是这样的:

<bean id="listenerContainer" class="com.miax.test.TestListenerMDPImpl" autowire="byName">
    <property name="connectionFactory" ref="mqConnFactory" />
    <property name="destinationName" value="QUEUE" />
    <property name="messageListener" ref="listenerAdapter" />
    <property name="transactionManager" ref="jtaTransactionManager" />
    <property name="sessionTransacted" value="true" />
    <property name="concurrentConsumers" value="1" />
    <!-- receive time out, should be less than tranaction time out -->
    <property name="receiveTimeout" value="3000" />
    <!-- retry connection every 1 seconds -->
    <property name="recoveryInterval" value="1000" />
    <property name="autoStartup" value="true" />
    <property name="sessionAcknowledgeMode" value="0" />
</bean>

根据需要任何其他信息将给予。

谢谢。

Answer 1:

您正在使用的客户端必须是,如果在此之前,今年五月下载的扩展事务客户端。 任何V7.0.1和更高的客户为2012年5月的有建于XA能力。如果有疑问,请下载客户端WMQ的当前版本和安装。

其次,XA事务管理器必须有它自己的连接到队列管理器独立于应用程序。 这使得它可以连接,如果应用程序无法重新启动调和交易。 要做到这一点,事务管理器必须以XX_OPEN串并转换器文件作为信息中心主题中描述的配置配置符合XA的事务管理器

对于什么它的价值,有没有这样的事情在WMQ持久队列。 它是是永久性的(或没有)消息本身。 欲了解更多关于这一点,请参阅的话题我的博客文章 。 这是因为当人们认为队列本身是持久的,他们往往会设计出产生意想不到的效果解决方案,而重要的课题。 请阅读博客文章!



文章来源: WebSphere MQ and Atomikos - Messages Lost on process termination