我试图通过从JMS队列获取消息并以事务方式将其放入VM持久性队列来实现可靠性模式。重点是确保消息存储在VM队列中(稍后进行异步处理)或根本不从JMS队列中消耗。
这是我的相关配置部分。
<vm:connector name="asyncDbConnector">
<default-persistent-queue-store/>
</vm:connector>
<endpoint name="asyncDbEndpoint" address="vm://asyncDb" connector-ref="asyncDbConnector" exchange-pattern="one-way"/>
<flow name="jsmInFlow">
<jms:inbound-endpoint ref="jmsInEndpoint">
<jms:transaction action="ALWAYS_BEGIN"/>
</jms:inbound-endpoint>
<logger message="In jsmInFlow: #[message.payload]"/>
<outbound-endpoint ref="asyncDbEndpoint" exchange-pattern="one-way"/>
</flow>
<flow name="asyncDbFlow">
<vm:inbound-endpoint ref="asyncDbEndpoint">
<vm:transaction action="ALWAYS_BEGIN"/>
</vm:inbound-endpoint>
<logger message="In asyncDbFlow: #[message.payload]"/>
...
</flow>
使用这样的配置我得到&#34; Endpoint是事务性的,但事务不支持它&#34;。据我所知,它试图同步执行asyncDbFlow
并加入现有的事务,但JMS事务不支持VM事务。相反,如果排队失败,我需要它可靠地排队消息并回滚JMS事务。骡子有可能吗?