Apache Camel / Java DSL / 如何添加处理器列表?
Apache Camel / Java DSL / How to add a list of processors?
在我的项目中,我有几条路线,它们都有相似的设置。
端点的具体值和 属性 值以及应该使用的处理器是从配置文件中解析的。
因此,我创建了一种方法来设置这些路由。一个参数是处理器名称列表或数组。
是否可以将此处理器引用列表添加到路由定义?
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 而不是处理器。
但从我的角度来看,这是错误的方法,因为我已经知道在设置路由定义时应该使用哪些处理器。
这里最简单的解决方案就是遍历列表并更新路由定义:
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 );
另一种解决方案是使用 RoutingSlip
模式,您可以在其中动态准备(并存储在 header 中)下一个端点的列表。
但是,当然,这需要您将处理器变成端点。
更多信息,请访问:
https://camel.apache.org/components/latest/eips/routingSlip-eip.html
在我的项目中,我有几条路线,它们都有相似的设置。 端点的具体值和 属性 值以及应该使用的处理器是从配置文件中解析的。
因此,我创建了一种方法来设置这些路由。一个参数是处理器名称列表或数组。 是否可以将此处理器引用列表添加到路由定义?
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 而不是处理器。
但从我的角度来看,这是错误的方法,因为我已经知道在设置路由定义时应该使用哪些处理器。
这里最简单的解决方案就是遍历列表并更新路由定义:
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 );
另一种解决方案是使用 RoutingSlip
模式,您可以在其中动态准备(并存储在 header 中)下一个端点的列表。
但是,当然,这需要您将处理器变成端点。
更多信息,请访问: https://camel.apache.org/components/latest/eips/routingSlip-eip.html