在我的应用程序中,我有一个通用的Camel Route,如下面的
from("direct:something").to("direct:outgoing")
然后在我的代码中动态地部署另一条路径:
from("direct:outgoing").process(processor)
从路径1流向路径2时,将创建一个新的Exchange。是否有惯用的方法来关联它们?我应该在发送之前在第一条路线上设置EXCHANGE.Correlation_ID标头吗?
答案 0 :(得分:2)
这绝对应该在一个交易所处理。运行此测试,您将看到相同的camel Exchange,具有相同的属性等。
public class CamelExchangeTest {
public static void main(String[] args) throws Exception {
final Processor showExchangeIdProcessor = new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getExchangeId());
}
};
Main camelMain = new Main();
camelMain.addRouteBuilder(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer:foo?period=1s&repeatCount=1")
.log("excgabge created!")
.process(showExchangeIdProcessor)
.to("direct:outgoing")
;
from("direct:outgoing")
.log("outgoing!")
.process(showExchangeIdProcessor)
;
}
});
camelMain.run();
}
}
输出:
ID-MYPC-55760-1411129552791-0-2
ID-MYPC-55760-1411129552791-0-2
所以其他事情正在发生。当你说"direct:outgoing"
时,你的意思是那个或者它是不同的东西 - 也许是一个不同的组成部分?
当你说路线是动态创建的时候,究竟是怎么做的,以及什么时候(以及为什么?)
答案 1 :(得分:1)
来自Camel doc:
某些EIP模式会剥离子邮件,在这种情况下,Camel会在Exchange上添加一个关联ID作为属性,并使用键
Exchange.CORRELATION_ID
链接回源Exchange。例如,Splitter,Multicast,Recipient List和Wire Tap EIP就是这样做的。
因此,Exchange.CORRELATION_ID
由Camel设置,不应由您的应用程序设置。但如果您需要,请随意设置自定义标题或属性:
exchange.getIn().setProperty("myProperty", myIdentifier);