在同一个骆驼语境中的路由之间传递交换属性

时间:2018-12-18 09:07:58

标签: apache-camel

我具有以下要求:

路线1:from(timer:foo?repeatcount=1).recepientList("rest service")

路线2:from(sourcequeue).process(new myprocessor()).to(destinationqueue)

需要使用来自route 1的json响应并将其传递给Route 2处理器。 我的问题是,每当我在exchange属性中设置json响应并尝试在Route 2处理器中使用它时,它都是null。

关于如何在这些路线之间传递交换属性的任何建议都会有很大帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果使用http骆驼组件,则http响应应该在正文中。您可以从处理器加载它。

String json = exchange.getIn().getBody(String.class);

from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.to(direct:sourcequeue)

您还可以使用标头来传递数据,从而将您的路线扔掉。

from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.setHeader(“myJsonResponse”, simple("${body}"))
.to(direct:sourcequeue)

String json = exchange.getIn().getHeader(“myJsonResponse”, String.class);

答案 1 :(得分:0)

您无法使用 Exchange属性在路由之间传递信息的原因是,它们不是邮件的一部分

看看this picture of the Camel Exchange model

当骆驼收到邮件时,它将邮件嵌入到Exchange中,并且Exchange通过路由传递。但是,当您发送消息(.to(...))时,仅发送消息。

因此,您必须使用(由Thomas回答)消息正文或消息头。