架构

路由组

师成师成· 更新于 2026-09-28· 阅读 9 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

路由组

组是多个相互关联路由的标识符。例如,一个由 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");
}

评论

登录后参与评论

正在加载评论…