Apache camel 在两条驼峰路由上关联消息
在我的应用程序中,我有一个通用的驼峰路线,如下所示Apache camel 在两条驼峰路由上关联消息,apache-camel,Apache Camel,在我的应用程序中,我有一个通用的驼峰路线,如下所示 from("direct:something").to("direct:outgoing") 然后在我的代码中动态部署另一条路由: from("direct:outgoing").process(processor) 当从路由1流向路由2时,将创建一个新的交换机。有没有一种惯用的方式将两者联系起来?我是否应该在发送前在第一条路由上设置EXCHANGE.Correlation\u ID头?这肯定应该在一个交换上处理。运行此测试,您将看到相同的
from("direct:something").to("direct:outgoing")
然后在我的代码中动态部署另一条路由:
from("direct:outgoing").process(processor)
当从路由1流向路由2时,将创建一个新的交换机。有没有一种惯用的方式将两者联系起来?我是否应该在发送前在第一条路由上设置EXCHANGE.Correlation\u ID头?这肯定应该在一个交换上处理。运行此测试,您将看到相同的camel交换,具有相同的属性,等等
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”时,你的意思是确切的,还是它是不同的东西——可能是不同的组件
当您说路线是动态创建的时,具体是如何创建的,以及何时(以及为什么?)从:
某些EIP模式将衍生子消息,在这些情况下,Camel将在Exchange上添加一个相关id,作为其键Exchange.correlation\u id
的属性,该属性链接回源Exchange。例如,拆分器、多播、收件人列表和Wire-Tap EIP可以实现这一点
因此,Exchange.CORRELATION\u ID
由Camel设置,不应由应用程序设置。但是,如果需要,请随意设置自定义标题或属性,例如:
exchange.getIn().setProperty("myProperty", myIdentifier);