0

骆驼。文件组件。我需要配置路由,以便仅在没有发生错误时才复制文件。是)我有的:

<route id="importFile" autoStartup="{{fdr.import.enabled}}">
            <from uri="direct:startImportFile"/>
            <from uri="file://{{fdr.folder.working}}?delete=true&amp;readLock=changed"/>
            <transacted ref="fdrTxRequired"/>
            <doTry>
                <to uri="file://{{fdr.folder.done}}"/> <!--1-->
                <bean ref="transactionsProcessor"/>
                <bean ref="transactionsFinalizer"/>
                <!--2-->
                <doCatch>
                    <exception>java.lang.Exception</exception>
                    <to uri="file://{{fdr.folder.failed}}"/>
                    <bean ref="exceptionProcessor"/>
                </doCatch>
                <doFinally>
                    <bean ref="responsePublisher"/>
                </doFinally>
            </doTry>
        </route>

所需逻辑:如果在 transactionsProcessor 和 transactionsFinalizer 中处理一切正常,那么我们只需将文件从文件夹“工作”移动到文件夹“完成”如果在 transactionProcessor 或 transactionsFinalizer 中发生错误,那么我们将文件从“工作”移动到“失败”和“完成”必须为空如果我将第 1 行放到占位符 2 中,则在我的自定义处理器中处理后,我无法将文件重新定位为 InputStream。也许我们可以从“工作”转向“完成”。然后我们处理文件,如果可以,那么就可以了。如果发生错误,则从“完成”移动到“失败”。请帮忙。

4

1 回答 1

0

ou,我找到了解决方案 - 使用 stopOnExeption 进行多播

<routeContext id="fileImportOnlyRouteContext" xmlns="http://camel.apache.org/schema/spring">
        <route id="importFile" autoStartup="{{fdr.import.enabled}}">
            <from uri="direct:startImportFile"/>
            <from uri="file://{{fdr.folder.working}}?delete=true&amp;readLock=changed"/>
            <transacted ref="fdrTxRequired"/>
            <doTry>
                <multicast stopOnException="true">
                    <to uri="direct:startFileImporter"/>
                    <to uri="file://{{fdr.folder.done}}"/>
                </multicast>
                <doCatch>
                    <exception>java.lang.Exception</exception>
                    <to uri="file://{{fdr.folder.failed}}"/>
                    <bean ref="exceptionProcessor"/>
                </doCatch>
                <doFinally>
                    <bean ref="responsePublisher"/>
                </doFinally>
            </doTry>
        </route>

        <route id="fileImporterRoute">
            <from uri="direct:startFileImporter"/>
            <bean ref="transactionsProcessor"/>
            <bean ref="transactionsFinalizer"/>
        </route>
    </routeContext>
于 2013-02-11T05:29:03.823 回答