Apache camel 可以在用户级别/特定于用户的级别收集骆驼路线度量

Apache camel 可以在用户级别/特定于用户的级别收集骆驼路线度量,apache-camel,Apache Camel,我们正在使用camel、jms和rest构建文件处理系统(web应用程序+有状态)。多个用户可以上传文件。用户需要显示最小值、最大值、平均耗时、平均点击次数等。这几乎与camel提供的路由度量一致。是否有方法在用户级别收集此路由度量?或者我们应该扩展度量组件及其注册表以满足我们的需求 添加了以下代码更改以收集度量 <!--added to bean context --> <bean id="policy" class="org.apache.camel.componen

我们正在使用camel、jms和rest构建文件处理系统(web应用程序+有状态)。多个用户可以上传文件。用户需要显示最小值、最大值、平均耗时、平均点击次数等。这几乎与camel提供的路由度量一致。是否有方法在用户级别收集此路由度量?或者我们应该扩展度量组件及其注册表以满足我们的需求

添加了以下代码更改以收集度量

 <!--added to bean context --> 
 <bean id="policy" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicy"/>

 <!-- below changes done to route -->        
 <route id="prefRate"  routePolicyRef="policy">

     <from uri="cxfrs://bean://prefRateService?bindingStyle=SimpleConsumer"/>
      <log message="Processing username:${headers.username}"/>
     <setHeader headerName="HEADER_METRIC_NAME">
                <simple>${headers.username}</simple>
     </setHeader>
     <to uri="log:body?level=INFO"/>
     <to uri="bean:fxPrefRateProcessor" />
      <to uri="metrics:meter:prefRateCounter"/>
  </route>

${headers.username}

您可以通过设置
MetricsConstants.HEADER\u metric\u name
头来覆盖路由中的度量名称。要获得每个用户的唯一度量,只需在度量名称中包含唯一的用户名。你可以这样做:

.setHeader(MetricsConstants.HEADER_METRIC_NAME, simple("your.metric.name.for.user.${body.user}"))
.to("metrics:meter:your.metric.name");

这将为您提供每个用户的指标。apache站点上有一些文档介绍了我们根据您的建议所做的更改。但无法查看hawtio中的指标。请确保您正确填充了用户名(上面的简单表达式就是一个示例,我不知道您在exchange中的唯一用户字符串保存在哪里),并检查以确保在您的camel日志中记录了正确的指标。名称是唯一填充的,通过hawtio中的跟踪进行检查。这是我的错。文档清楚地表明,可以从Java代码中提取度量。同时,我也会根据建议检查骆驼日志。