在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 list,dynamic Router或routing slip。
例如,您可以使用“收件人列表”来获得如下路线:
from("direct:foo").routeId("routeFoo").recipientList(simple("metrics:counter:${routeId}"));
但是,如果您担心设置标头太多,对我来说还不清楚这些机制是否简单得多。