java - Apache-Camel:如何控制交换 header 的范围?

标签 java scope apache-camel

我使用交换 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/

相关文章:

java - 如何更改 JProgressBar 颜色?

java - BridgePropertyPlaceholderConfigurer Camel bean

java - 如何在没有soapaction header 验证的情况下在camel中创建cxf端点?

Java 泛型扩展类参数

java - 写入输出java时从输入中删除相同的字母

scope - Rust 中看似矛盾的借用场景

javascript - javascript 和 Node.js 中的全局变量作用域

scope - "Qed"和 "Defined"有什么区别?

java - 如何让Camel Websocket组件在客户端连接时发送消息?

java - 屏幕分辨率java代码