在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会更方便。
答案 0 :(得分:2)
查看Simple语言的Camel文档。在那里,您会看到${id}
引用了消息ID,而${routeId}
引用了路由ID。
编辑:我发现我误解了你最初的担忧 - 不是路由ID的正确变量,而是如何将其注入to
。
您遇到的基本问题是您尝试使用to
执行动态路由。您正在尝试连接字符串以组成端点,但是在调用configure
方法时会评估此并置,而不是在您的路由执行时评估。
嗯,Camel确实有一些执行动态路由的机制,例如recipient list,dynamic Router或routing 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