我有一个过程,该过程获取XML消息,该消息必须被原始XML事务中列出的1个或多个其他文件充实后,才能提交给REST / SOAP api。
<route xmlns="http://camel.apache.org/schema/spring" customId="true" id="...">
<from uri="jms:queue:job?transacted=true&acceptMessagesWhileStopping=true&concurrentConsumers=1&errorHandlerLoggingLevel=INFO&selector=..."/>
<onException useOriginalMessage="true">
<handled>
<constant>true</constant>
</handled>
<redeliveryPolicy logStackTrace="false" maximumRedeliveries="0"/>
<choice>
<when>
<expressionDefinition>true</expressionDefinition>
<log loggingLevel="WARN" message="${file:onlyname} - Attachment missing, submitting job to delay queue!"/>
<to uri="jms:queue:delay"/>
</when>
<otherwise>
<log loggingLevel="WARN" message="${file:onlyname} - Attachment missing, submitting job to error queue!"/>
<to uri="jms:queue:error"/>
</otherwise>
</choice>
</onException>
<unmarshal>
<asn1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="dataFormat"/>
</unmarshal>
<loop>
<simple>${exchangeProperty.attachmentFileList.size()}</simple>
<pollEnrich aggregateOnException="false" cacheSize="5" timeout="8000">
<expressionDefinition/>
</pollEnrich>
</loop>
<to uri="cxf://http://..."/>
</route>
我正在使用没有重新交付策略的队列,因此当列出的文件之一仍然丢失时,会发生异常,并将原始XML放入延迟队列。由于我正在使用事务,因此我不想让异常传播,因此我将异常设置为handled = true。但是,如果有例如2个附件,并且第一个附件可用,则将为第一个文件调用GenericFileDeleteProcessStrategy。我希望可以确认JMS事务,但是避免在不执行GenericFileDeleteProcessStrategy或删除过程的情况下删除文件。