我要求批量订单执行以下操作:
该过程的基本部分是,如果4个数据库插入失败,则不应将订单发送到队列以进行进一步处理。很明显,这是一个多资源事务,但是如何使用队列的多事务以及数据库插入来完成此配置?在尝试创建多事务配置时,我发现foreach不能用作多事务元素的子元素。对于如何执行这样的配置,我将不胜感激。
<transformer component.. for splitting orders
<foreach collection="#[message.payload]" doc:name="For Each Order"
rootMessageVariableName="Original">
<component... for enrichment
<jms:outbound-endpoint queue="orders.queue"
exchange-pattern="request-response" connector- ref="amqConnector"
doc:name="JMS - Send to Order Queue"/>
</foreach>
<db:insert config-ref="DBConfig" doc:name="Insert_Order_l">
<db:parameterized-query.....
<db:insert>
<db:insert config-ref="DBConfig"..
<db:insert config-ref="DBConfig"
答案 0 :(得分:0)
您可以将所有DB和JMS端点包装在 Transactional 范围内。像这样:
<db:generic-config name="Generic_Database_Configuration" url="blah" doc:name="Generic Database Configuration"/>
<jms:connector name="JMS" validateConnections="true" doc:name="JMS"/>
<jms:activemq-connector name="Active_MQ" username="blah" password="blah" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>
<file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="blahFlow">
<file:inbound-endpoint responseTimeout="10000" doc:name="File" connector-ref="File" path="blah"/>
<foreach doc:name="For Each">
<transactional action="ALWAYS_BEGIN" doc:name="Transactional">
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query/>
</db:insert>
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query/>
</db:insert>
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database">
<db:parameterized-query/>
</db:insert>
<jms:outbound-endpoint doc:name="JMS" connector-ref="Active_MQ" queue="blah">
<jms:transaction action="JOIN_IF_POSSIBLE"/>
</jms:outbound-endpoint>
</transactional>
</foreach>
</flow>