Camel-Metrics:在计数器名称中使用route id

时间:2014-10-14 08:41:16

标签: java apache-camel metrics

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

我试过了:

from("direct:foo").routeId("routeFoo")
    .to("metrics:counter:${id}")

from("direct:foo").routeId("routeFoo")
    .to("metrics:counter:"+ simple("${id}"))

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

无论如何在这个组件URI中使用表达式语言吗?

由于

编辑:

添加标题可以完成工作:

.setHeader(MetricsConstants.HEADER_METRIC_NAME, simple("${id}.${header.operationName}"))

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

2 个答案:

答案 0 :(得分:2)

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

编辑:我发现我误解了你最初的担忧 - 不是路由ID的正确变量,而是如何将其注入to

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

嗯,Camel确实有一些执行动态路由的机制,例如recipient listdynamic Routerrouting slip

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

from("direct:foo").routeId("routeFoo").recipientList(simple("metrics:counter:${routeId}"));

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

答案 1 :(得分:1)

Camel 2.16

的更新答案
from("direct:foo").routeId("routeFoo").toD("metrics:counter:${routeId}");

http://camel.apache.org/message-endpoint.html#MessageEndpoint-DynamicTo