我的应用程序(弹簧消息侦听器)从队列中读取并在单个事务中写入数据库。我使用 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>
任何其他信息将根据需要提供。
谢谢。