Camel-Metrics :在计数器名称中使用路由 ID

Tho*_*mas 1 java metrics apache-camel

在 Apache Camel 2.14 的 Metrics 组件中,我尝试使用简单表达式语言设置计数器的名称,但似乎指标组件没有使用它。

我试过了 :

from("direct:foo").routeId("routeFoo")
    .to("metrics:counter:${id}")
Run Code Online (Sandbox Code Playgroud)

from("direct:foo").routeId("routeFoo")
    .to("metrics:counter:"+ simple("${id}"))
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,计数器的名称都设置为 ${id}。

是否可以在此组件 URI 中使用表达式语言?

谢谢

编辑 :

添加标题即可完成这项工作:

.setHeader(MetricsConstants.HEADER_METRIC_NAME, simple("${id}.${header.operationName}"))
Run Code Online (Sandbox Code Playgroud)

但直接在 URI 中使用 SEL 会更方便。

Ray*_*Ray 5

查看Simple语言的 Camel 文档。在那里,您会看到 指的${id}是消息 id,而${routeId}指的是路由 id。

编辑:我发现我误解了您最初的担忧 - 不是路线 id 的正确变量是什么,而是如何将其注入到to.

您遇到的基本问题是您正在尝试使用to. 您尝试连接字符串来组成端点,但此连接是在configure调用方法时评估的,而不是在执行路由时评估的。

嗯,Camel 确实有一些执行动态路由的机制,例如收件人列表动态路由器路由表

例如,您可以使用收件人列表来获取如下路由:

from("direct:foo").routeId("routeFoo").recipientList(simple("metrics:counter:${routeId}"));
Run Code Online (Sandbox Code Playgroud)

但如果您担心设置标头太多,我不清楚这些机制是否简单得多。