ibm-mq - WebSphere MQ 和 Atomikos - 进程终止时丢失的消息

标签 ibm-mq atomikos

我的应用程序( Spring 消息监听器)从队列中读取并在单个事务中写入数据库。我使用 Atomikos 来提供 XA 事务行为。例如,当应用程序突然使用 kill 语句终止时,我看到消息丢失了。我需要使用任何特定的配置吗?队列应该是持久的吗?目前,队列是非持久的。我的 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>

任何其他信息将根据需要提供。

谢谢。

最佳答案

如果在今年 5 月之前下载,您使用的客户端必须是扩展交易客户端。截至 2012 年 5 月,任何 V7.0.1 和更高版本的客户端都内置了 XA 功能。如果有疑问,请下载 WMQ 客户端的当前版本并安装。

其次,XA 事务管理器必须有它自己的与独立于应用程序的队列管理器的连接。这样,如果应用程序无法重新启动,它就可以连接和协调事务。为此,必须使用 XX_OPEN 字符串和开关文件配置事务管理器,如信息中心主题 Configuring XA-compliant transaction managers 中所述。 .

就其值(value)而言,WMQ 中没有持久队列这样的东西。消息本身是持久的(或不是)。有关更多信息,请参阅 my blog post on the topic .这是一个相当重要的话题,因为当人们假设队列本身是持久的时,他们往往会设计出产生意外结果的解决方案。请阅读博文!

关于ibm-mq - WebSphere MQ 和 Atomikos - 进程终止时丢失的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461572/

相关文章:

java - JTA、带有atomikos的Hibernate多个XA数据源不维护SpringBoot中的事务

java - Atomikos、Java 8 和多个数据库

xml - Websphere 消息代理 : Accessing XML elements in ESQL

java-8 - 两个简单的 IBM MQ 客户端测试写入 MQ 队列 - 为什么一个有效,而另一个无效?

c# - 将 USER_ID_PROPERTY 添加到 Hashtable 时,MQQueueManager 构造函数失败

Spring Data JPA 无法调用 JtaTransactionManager

java - 如何编写 oracle 函数来更新不同模式上的表

java - 如何修复 Atomikos JTA 和 Hibernate 的 Spring 配置?

java - 如何使用 PCF 将 QueueManager 作为部分存储库添加到集群?

java - 为什么会出现这个异常: "java.util.MissingResourceException: Can' t find resource for bundle java. util.PropertyResourceBundle,key MQJE001b”?