架构
路由组
登录后可跨设备保存划线和私人笔记登录
路由组
组是多个相互关联路由的标识符。例如,一个由 2 条不同路由组成的订单集成,可以通过组名 order 来标识。路由组可以仅作为标签使用,也可以用于一次性对整个组执行任务或进行监控。
示例
在下面的路由中,我们使用 group 选项为前两条路由指定相同的组名 order,以标识这两条路由属于同一个组。最后一条路由没有分配组。
- Java
- XML
- YAML
from("activemq:queue:order.in")
.routeId("validate")
.group("order")
.to("bean:orderServer?method=validate")
.to("direct:processOrder");
from("direct:processOrder")
.routeId("process")
.group("order")
.to("bean:orderService?method=process")
.to("activemq:queue:order.out");
from("timer:tick")
.to("bean:wakeup");<route id="validate" group="order">
<from uri="activemq:queue:order.in"/>
<to uri="bean:orderService?method=validate"/>
<to uri="direct:processOrder"/>
</route>
<route id="process" group="order">
<from uri="direct:processOrder"/>
<to uri="bean:orderService?method=process"/>
<to uri="activemq:queue:order.out"/>
</route>
<route>
<from uri="timer:tick"/>
<to uri="bean:wakeUp"/>
</route>- route:
id: validate
group: order
from:
uri: activemq:queue:order.in
steps:
- to:
uri: bean:orderServer
parameters:
method: validate
- to:
uri: direct:processOrder
- route:
id: process
group: order
from:
uri: direct:processOrder
steps:
- to:
uri: bean:orderService
parameters:
method: process
- to:
uri: activemq:queue:order.out
- route:
from:
uri: timer:tick
steps:
- to:
uri: bean:wakeUp从路由模板创建路由
从路由模板创建新路由时,也可以为所创建的路由指定一个分组名称。
在下面的示例中,我们使用给定的参数集从模板 myTemplate 创建了 2 条新路由,并将 greetings 作为分组名称分配给这些创建的路由。
- Java
- XML
- YAML
templatedRoute("myTemplate")
.group("greetings")
.parameter("name", "one")
.parameter("greeting", "Hello");
templatedRoute("myTemplate")
.group("greetings")
.parameter("name", "two")
.parameter("greeting", "Bonjour")
.parameter("myPeriod", "5s");<templatedRoutes>
<templatedRoute routeTemplateRef="myTemplate" group="greetings">
<parameter name="name" value="one"/>
<parameter name="greeting" value="Hello"/>
</templatedRoute>
<templatedRoute routeTemplateRef="myTemplate" group="greetings">
<parameter name="name" value="two"/>
<parameter name="greeting" value="Bonjour"/>
<parameter name="myPeriod" value="5s"/>
</templatedRoute>
</templatedRoutes>- templatedRoute:
routeTemplateRef: "myTemplate"
group: "greetings"
parameters:
- name: "name"
value: "one"
- name: "greeting"
value: "Hello"
- templatedRoute:
routeTemplateRef: "myTemplate"
group: "greetings"
parameters:
- name: "name"
value: "two"
- name: "greeting"
value: "Bonjour"
- name: "myPeriod"
value: "5s"在 Java 中管理路由分组
Java API 允许检索某个分组中的所有路由并执行各种任务。
以下是一个暂停所有路由的示例:
List<Route> routes = context.getRoutesByGroup("order");
for (Route route : routes) {
System.out.println("Suspending routeId=" + route.getId() + " for group=" + route.getGroup());
route.getRouteController().suspendRoute(route.getId());
}监控路由组
Camel 提供了可选的 JMX 管理支持,其中包括对路由组的管理。
以下代码将获取名为 order 的路由组所对应的 JMX MBean ManagedRouteGroupMBean。通过该 MBean,你可以获取指标信息,也可以执行启动和停止该组中所有路由的操作。
例如,要获取该组中失败的 Exchange 总数:
ManagedCamelContext managedContext = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);
ManagedRouteGroupMBean managedRouteGroup = managedContext.getManagedRouteGroup("order");
if (managedRouteGroup != null) {
System.out.println("Group order has " + managedRouteGroup.getExchangesFailed() + " failed exchanges");
}评论
登录后参与评论
正在加载评论…
KnowForge