Apache camel 如何在Camel中按顺序处理相同的消息?

Apache camel 如何在Camel中按顺序处理相同的消息?,apache-camel,Apache Camel,我是骆驼队的新手,我正在努力做到以下几点 我想处理相同的消息两次。我必须转换这两条消息并首先处理一条消息,然后只有在第一条消息成功执行时才处理第二条消息(我有一个条件) 我首先尝试使用多播。然后我转换每条路由中的消息。第一个(操作\u DC)仅在成功时向第二个(操作\u AC)发送成功消息。第二个操作包含一个聚合,该聚合将等待两条消息超时。我只想处理来自多播的消息,并丢弃另一条消息 <route id="t_operation_ME"> <from uri="direc

我是骆驼队的新手,我正在努力做到以下几点

我想处理相同的消息两次。我必须转换这两条消息并首先处理一条消息,然后只有在第一条消息成功执行时才处理第二条消息(我有一个条件)

我首先尝试使用多播。然后我转换每条路由中的消息。第一个(操作\u DC)仅在成功时向第二个(操作\u AC)发送成功消息。第二个操作包含一个聚合,该聚合将等待两条消息超时。我只想处理来自多播的消息,并丢弃另一条消息

<route id="t_operation_ME">
    <from uri="direct:operation_ME" id="t.direct.aggregatedService"></from>
    <setHeader headerName="id">
        <simple>exchangeId</simple>
    </setHeader>
    <multicast parallelProcessing="true" strategyRef="defaultAggregationStrategy" stopOnException="true" onPrepareRef="cleanHeader" parallelAggregate="false" completionPredicate="">
        <to uri="direct:operation_DC"></to>
        <to uri="direct:operation_AC"></to>
    </multicast>
</route>

<route id="direct:operation_DC">
    <from uri="direct:operation_DC" />
    <log message="ENTER DC"></log>
    <to uri="xslt:{{depasse:core.transformation.xml.path}}client/t/Operation_toDC_request.xsl" id="t.dc.transform.productos" />
    <to uri="activemq:QCIn" id="t.dc.qcin.queue.send"></to>
    <log message="EXIT DC ${body}"></log>
    <choice>
        <when>
            <xpath>//Data/Status[. = 'OK']</xpath>
            <log message="SEND TO AC"></log>
            <to uri="direct:operation_AC"></to>
        </when>
    </choice>
</route>

<route id="direct:operation_AC">
    <from uri="direct:operation_AC" />
    <log message="ENTER AC"></log>
    <aggregate completionTimeout="20000" completionSize="2" discardOnCompletionTimeout="true" strategyRef="tAggregationStrategy">
        <correlationExpression>
            <simple>header.id</simple>
        </correlationExpression>
        <log message="ENTER AGG AC ${body}"></log>

        <to uri="xslt:{{depasse:core.transformation.xml.path}}client/t/Operation_toAC_request.xsl" id="t.ac.transform.productos" />
        <to uri="activemq:QCIn" id="t.ac.qcin.queue.send"></to>
        <log message="EXIT AC ${body}"></log>
    </aggregate>
    <log message="END AC\n${body}"></log>
</route>

交换ID
//数据/状态[.=“正常”]
header.id

问题是,当我记录“EXIT AC”和“END AC”时,消息是不同的。这意味着,当我在服务器上正确地观察过程时,AC客户端接收到错误的消息。

多播始终向标记之间的每个端点发送消息副本。如果要仅在操作\u DC成功运行后调用路由操作\u AC,则不应使用多播,但应在操作\u DC开始时保存正文,例如使用属性和:


${body}
在调用操作_AC set body从一开始带出消息体之前:

<setBody>
    <simple>${property.body}</simple>
</setBody>
<to uri="direct:operation_AC"/>

${property.body}

路线id为operationCDI\u AC非operation\u AC。是否正确?您说得对。但是为了在StackOverflow中发布这个问题,我改变了所有的名字。我编辑了这个问题,你应该清楚地看到它是“行动”。
<setBody>
    <simple>${property.body}</simple>
</setBody>
<to uri="direct:operation_AC"/>