我正在开发一个 POC,它执行以下操作
- 使用消息驱动的通道适配器来接收事务中的消息
- 调用服务激活器,该激活器使用处理程序将从适配器接收到的消息插入到数据库,并将消息发布到出站通道。
现在,如果消息的数据库插入失败,我希望 JMS 消息返回到队列,以便稍后重试。
使用我的以下配置,它似乎不起作用。(即,即使在插入数据库时出现故障,消息也会从队列中删除。
任何指针或示例配置都会有所帮助。
<integration:channel id="jmsInChannel">
<integration:queue/>
</integration:channel>
<int-jms:message-driven-channel-adapter id="jmsIn"
transaction-manager="transactionManager"
connection-factory="sConnectionFactory"
destination-name="emsQueue"
acknowledge="client" channel="jmsInChannel"
extract-payload="false"/>
<integration:service-activator input-channel="jmsInChannel"
output-channel="fileNamesChannel" ref="handler" method="process" />
<bean id="handler" class="com.irebalpoc.integration.MessageProcessor">
<property name="jobHashTable" ref="jobsMapping" />
</bean>
设置acknowledge =“transacted”,并且我认为transactionManager是一个JDBC(或JTA)事务管理器。
您还需要从 JmsInChannel 中删除 ,以便数据库事务发生在同一线程上。
Spring会将数据库事务与JMS事务同步。
然而,读http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html的影响。
如果您无法使服务幂等,您可能需要考虑 XA 事务管理器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)