Apache Camel中定义RouteBuilder时如何从Map动态添加headers
实现方案
方案1:路由构建阶段批量添加Header(静态定义)
利用Camel路由的建造者模式,先持有RouteDefinition实例,遍历Header Map逐个拼接setHeader规则即可:
final RouteBuilder routeBuilder = new RouteBuilder() { @Override public void configure() throws Exception { // 先获取路由定义实例 RouteDefinition route = from(start).routeId(id); // 遍历Header集合逐个添加设置规则 for (Map.Entry<String, String> entry : headers.entrySet()) { route = route.setHeader(entry.getKey(), constant(entry.getValue())); } // 继续拼接后续的路由处理节点 route.process(myProcessor) .to(end); } }; camelContext.addRoutes(routeBuilder);
方案2:运行时动态设置Header(更简洁)
通过自定义Processor在消息处理阶段统一批量写入Header,不需要修改路由构建逻辑:
final RouteBuilder routeBuilder = new RouteBuilder() { @Override public void configure() throws Exception { from(start).routeId(id) // 批量写入所有Header .process(exchange -> { headers.forEach(exchange.getMessage()::setHeader); }) .process(myProcessor) .to(end); } }; camelContext.addRoutes(routeBuilder);
补充说明
- 方案1属于静态路由定义的一部分,路由启动后Header设置规则不会变化,可以在Camel的路由元数据中查看到对应的配置。
- 方案2在消息路由的运行时动态设置Header,灵活性更高,代码更简洁,注意匿名内部类/Lambda访问的外部
headers变量需要是final或者有效final。
内容的提问来源于stack exchange,提问作者Jjufi21
相关产品推荐
相关产品推荐

