Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 在两条驼峰路由上关联消息_Apache Camel - Fatal编程技术网

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);