在Apache Camel 2.14的Metrics组件中,我试图使用简单表达语言设置计数器的名称,但是看来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会更方便。

最佳答案

查看Camel文档中的Simple语言。在那儿,您会看到${id}表示消息ID,而${routeId}表示路由ID。

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

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

好吧,骆驼确实有两种执行动态路由的机制,例如recipient listdynamic Routerrouting slip

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

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


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

07-26 08:24
查看更多