Apache Camel / Java DSL /如何添加处理器列表?

8ftvxx2r  于 2022-11-23  发布在  Apache
关注(0)|答案(2)|浏览(147)

在我的项目中,我有几个路由,它们都有类似的设置。端点和属性值的具体值以及应该使用哪些处理器都是从配置文件中解析出来的。
因此,我创建了一个方法来设置这些路由。一个参数是处理器名称的列表或数组。是否有可能将处理器引用的列表添加到路由定义中?

protected void setupRoute(String routeKey, String nbiSystemName, String requestEndpointUrl,
        String defaultSbi, String reqSwitchRouteId, ArrayList<String> processorNames) {
    
    from(requestEndpointUrl)
        .routeId(routeKey).transacted()
        .setProperty(PROPERTY_CBS_STARTTIME, simple("${date:now:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}"))
        .setProperty(PROPERTY_CBS_NBI, constant(nbiSystemName))
        .setProperty(PROPERTY_CBS_SBI, constant(defaultSbi))
        
//          At this place I want to add all of the processors like
//          .process("processorName")

        .to("direct:" + reqSwitchRouteId );
}

作为一种解决方案,我考虑使用.loop().loopDoWhile()与bean而不是处理器。但从我的Angular 来看,这是错误的方法,因为我已经知道当我设置路由定义时应该使用哪些处理器。

r1zk6ea1

r1zk6ea11#

这里最简单的解决方案就是遍历列表并更新路由定义:

RouteDefinition route = from(requestEndpointUrl)
    .routeId(routeKey).transacted()
    .setProperty(PROPERTY_CBS_STARTTIME, 
                 simple("${date:now:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}"))
    .setProperty(PROPERTY_CBS_NBI, constant(nbiSystemName))
    .setProperty(PROPERTY_CBS_SBI, constant(defaultSbi));

for(String processorName: processorNames)
    route = route.process(processorName);

route.to("direct:" + reqSwitchRouteId );
dba5bblo

dba5bblo2#

另一种解决方案是使用RoutingSlip模式,动态地准备(并存储在头中)下一个端点的列表。
更多信息,请访问:https://camel.apache.org/components/latest/eips/routingSlip-eip.html

相关问题