我可以在同一Camel上下文中的Camel Routes之间共享本地数据吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在同一Camel上下文中的Camel Routes之间共享本地数据吗?相关的知识,希望对你有一定的参考价值。

我有一个路由(route1),它将数据发送到HTTP端点。为此,它必须设置授权标头。标头值每小时超时,必须续订。

为此我创建了另一个路由(route2),它使用提供的凭据(getCredentials)定期从Web服务获取访问令牌。这很好用。

如何为access1提供访问令牌?

我尝试过简单的局部变量,静态变量,AtomicReference变量(volatile和static ......)

我的代码(为了便于阅读而缩短):

public class DataRoute extends RouteBuilder{

    volatile static AtomicReference<String> cache = new AtomicReference<>();

    @Override
    public void configure() throws Exception {

        from("timer://test?period=3500000")
                .routeId("route2")
                .setHeader("Authorization", constant(getCredentials()))
                .to("http://127.0.0.1:8099/v1/login")
                .process(exchange -> {
                    cache.set(parseAuthString(exchange.getIn().getBody(String.class)));
                });


        ... other route producing for direct:rest       

        from("direct:rest")
                .routeId("route1")
                .setHeader("Authorization",constant((cache.get()==null?"":cache.get())))
                .to("http://localhost:8099/v1/shipment");

    }
}

缓存的值始终为空...

答案

不要使用constant来设置动态值,它只是一次性CONSTANT。

而是使用内联处理器(您可以使用java 8 lambda)或消息转换/ setBody与处理器。

以上是关于我可以在同一Camel上下文中的Camel Routes之间共享本地数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

Camel Rest XML DSL分离文件夹结果Unmarshall Exception

Apache Camel中的窃听和多播有啥区别

我们可以在camel-hystrix-eip中的onFallbackViaNetwork()之前提供一个处理器吗

Apache Camel 2.18中的IN子句

骆驼不是春天开始的

Payara中的Apache Camel:'java:/ TransactionManager'查找失败