【发布时间】:2020-01-08 16:22:40
【问题描述】:
我有一个问题,我希望它很简单.. 我有一条骆驼路线,它会采取一些行动,有一个处理器,这个处理器用一个相关 id 填充一个 threadLocal 变量。 在此之后,它运行一个 .bean(mybean, "mymethod"),在这个方法中我尝试从 threadLocal 变量中获取我的值,但它是 null。
我理解的一件事是骆驼在另一个线程上运行 bean 方法?这是真的吗?
我添加了另一个bean方法调用.bean(myBean, "myMethodForCorrelationId(correlationId)"),这个方法设置了threadLocal变量,之后.bean(mybean, "mymethod")可以访问到threadLocal的正确值。
代码:
private void getRoute() {
from(RouteConstant.INTERNAL)
// id
.routeId("myroute")
.setHeader(ElkKeys.EVENT_TYPE.getElkKey(), constant(EventType.EXCHANGE_REQUEST_REPLAY))
// extract header from query uri
.process(filtersListProcessor).choice()
// caching predicate
.when(cachePrediate)
// get from cache
.to(RouteConstant.GET_FROM_CACHE_ROUTE).otherwise()
.bean(mybean,"myMethodForCorrelationId(${header.correlationId})") // first call fill the threadLocal
// second call, the method use the previous threadLocal variable and it works
.bean(mybean,
"myMethod( ${header."
+ ElkKeys.QUERY_PARAMETERS.getElkKey() + "})")
.multicast()
// put in cache
.to(ExchangePattern.InOnly, RouteConstant.PUT_INTO_CACHE_ROUTE).endChoice()
.setHeader(ElkKeys.REPONSE_TIMESTAMP.getElkKey(), simple(RESPONSE_DATE_TIME))
// send trace
.to(ExchangePattern.InOnly, RouteConstant.SEND_SUCCESS_TRACE_TO_ELK);
}
我在谷歌上搜索,但我找不到任何关于此的信息,第一个 bean 方法使用的线程是否与第二个方法相同(每次在任何情况下)?
如果有人知道答案,我希望你能帮助我..
谢谢大家,
【问题讨论】:
标签: java apache-camel