我使用交换 header 来存储路由中的任何变量。但是,看起来这些 header 将被传递到从此路由调用的其他路由。
在下面的示例中,我调用 getContact 路由,该路由将调用 http 端点。但是,它还会发送从初始路由 direct:start 获得的 header ,variable1 和variable2。
from("direct:start")
.setHeader("variable1", constant("value1"))
.setHeader("variable2", constant("value2"))
.to("direct:getContact");
from("direct:getContact")
.setHeader("Content-Type", constant("application/json"))
.setHeader("Accept", constant("application/json"))
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.to("http://<host>:<port>/contact/3")
.unmarshal().json(JsonLibrary.Jackson);
有办法避免这种情况吗?相比之下,java中的方法调用将通过上下文切换隐藏所有现有变量。
最佳答案
我之前在使用 http4 发送 Web 服务调用时遇到过这个问题。当您使用 http4/http 端点时,Camel 似乎会发送整个交换,这相当烦人。我通过使用 content enricher 解决了这个问题。我在丰富的路由中使用 http4 进行了实际的调用,并使用了一个简单的聚合策略来组合这两条消息。
或者,您可以在 bean 中进行调用。这样你就失去了 Camel 的一些好处,但你可以完全控制调用主体。
关于java - Apache-Camel:如何控制交换 header 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809313/