架构

可视化路由图

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

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

路由图

自 Camel 4.21 起可用

camel-diagram 组件提供了路由渲染功能,可以输出 Camel 路由的可视化图表。

该功能可用于在构建和测试项目时自动生成路由图。

例如如下所示:

Foo Camel 路由图

使用 Camel CLI 生成路由图

你可以使用 JBang 生成路由图,示例如下:

camel cmd route-diagram foo.yaml

它也适用于 Java 源文件:

camel cmd route-diagram MyRoute.java

还可以包含多个文件:

camel cmd route-diagram MyRoute.java foo.yaml
使用 camel cmd route-diagram --help 查看更多选项。

另外,如果你以 --console 运行 Camel CLI,开发者控制台同样具备此功能,只需打开链接:http://localhost:8080/q/dev/route-diagram

若要在浏览器中查看拓扑图(路由之间如何连接),请使用:

http://localhost:8080/q/dev/route-diagram?mode=topology

拓扑视图支持以下查询参数:

  • mode=topology —— 从路由图(默认)切换到拓扑图
  • format=html —— 交互式 SVG Web 组件(默认)
  • format=png —— 静态 PNG 图片
  • format=text —— ASCII 字符画,format=unicode —— Unicode 制表符
  • external=true|false —— 包含/排除外部系统(如 Kafka、HTTP 等)(默认:true)
  • metric=true|false —— 显示实时消息交换计数(默认:true)

使用 Camel Main 生成路由图

具体做法是将 camel-diagram 添加为 test 作用域的依赖,然后添加一个特殊的单元测试,由它负责生成路由图并将其保存到指定目录。

以下代码演示了如何实现。

package org.apache.camel.example;

import org.apache.camel.test.main.junit6.CamelMainTest;
import org.junit.jupiter.api.Test;

/**
 * To dump route diagram only once
 */
@CamelMainTest(mainClass = MyApplication.class, dumpRouteDiagramFolder = "doc")
class MainDiagramTest {

    @Test
    void empty() {
        // empty test method
    }

}

因此,运行 mvn test 时会执行这个单元测试(连同你的其他测试),它负责生成路由图。

这些图表随后会被存储到 doc 文件夹中,具体位置由 @CamelMainTest 注解上的 dumpRouteDiagramFolder 参数指定。

使用 Spring Boot 生成路由图

要实现这一功能,需要添加 camel-diagram 作为测试范围(test scoped)的依赖,然后添加一个专门用于生成路由图并将其保存到指定文件夹的单元测试。

以下代码展示了具体做法。

package sample.camel;

import org.apache.camel.test.spring.junit6.CamelSpringBootTest;
import org.apache.camel.test.spring.junit6.EnableRouteDiagramDump;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * To dump route diagram only once
 */
@CamelSpringBootTest
@SpringBootTest(classes = MyCamelApplication.class)
@EnableRouteDiagramDump(folder = "doc")
public class DumpRouteDiagramTest {

    @Test
    public void empty() {
        // noop
    }

}

因此,当你运行 mvn test 时,这个单元测试就会被执行(与你的其他测试一起),它负责生成路由图。

这些图将按照 @EnableRouteDiagramDump 注解上 folder 参数的指定,存储在 doc 文件夹中。

路由拓扑图

除了单个路由图之外,Camel 还可以生成路由拓扑图,用来展示各条路由之间的连接关系。路由图展示的是单条路由内部的处理器,而拓扑图则让你能够俯瞰整个应用——哪些路由将消息发送给哪些其他路由,以及可选地展示涉及哪些外部系统(Kafka、HTTP、数据库等)。

拓扑图与路由图的对比

  • 路由图:展示单条路由的内部结构——其中的处理器、EIP 和端点。
  • 拓扑图:展示各条路由之间的连接——路由如何通过 direct、seda、kafka 等共享端点相互连接。

外部端点

诸如 Kafka 代理、HTTP 服务、数据库和云服务等外部系统,可以在拓扑图中显示为独立的节点。这样就能很方便地看出你的 Camel 路由如何与外部世界交互。

端点标识

有些组件使用查询参数来标识不同的目标。例如,couchbase:http://host:8091?bucket=orders 和 couchbase:http://host:8091?bucket=invoices 指向不同的存储桶。Camel 使用组件参数上的 endpointIdentity 元数据来正确匹配端点——仅在标识参数上不同的两个 URI,在拓扑中会被视为不同的目标。

使用 Camel CLI 生成拓扑图

使用 Camel CLI 运行时,你可以通过以下方式生成拓扑图:

camel cmd route-topology

有关更多详情,请参阅 camel cmd route-topology。

开发者控制台也可在以下地址访问:http://localhost:8080/q/dev/route-topology(JSON/文本数据),或以可视化 HTML 图的形式访问:http://localhost:8080/q/dev/route-diagram?mode=topology

在 mvn test 期间生成拓扑图

使用 @CamelMainTest 或 @EnableRouteDiagramDump 生成路由图时,默认也会生成一张拓扑图。拓扑图以 <context-name>-topology.png 的名称保存在相同的输出目录中。

你可以通过以下选项控制拓扑图的生成:

  • topology —— 是否生成拓扑图(默认:true)
  • topologyExternal —— 是否在拓扑图中包含外部系统(默认:true)

Camel Main 示例

@CamelMainTest(mainClass = MyApplication.class,
    dumpRouteDiagramFolder = "doc",
    dumpRouteDiagramTopology = true,
    dumpRouteDiagramTopologyExternal = true)
class MainDiagramTest {

    @Test
    void empty() {
        // empty test method
    }
}

Spring Boot 示例

@CamelSpringBootTest
@SpringBootTest(classes = MyCamelApplication.class)
@EnableRouteDiagramDump(folder = "doc", topology = true, topologyExternal = true)
public class DumpRouteDiagramTest {

    @Test
    public void empty() {
        // noop
    }
}

另请参阅

请参阅以下示例:

评论

登录后参与评论

正在加载评论…