订阅Spring Metrics频道

因此,根据Spring的文档,它将在REST端点和消息通道上发布指标。

REST端点工作正常,因为我得到了预期的结果。 但是,我想处理指标中的每个更改。 因此它表示默认情况下会将消息发布到名为“metricsChannel”的频道

我试图创建以下类来听这个频道,但它似乎没有激发。 其他所有内容都保留了Spring Boot应用程序的默认值。

package services.core; import org.springframework.stereotype.Service; import org.springframework.integration.annotation.ServiceActivator; @Service public class MetricService { @ServiceActivator(inputChannel = "metricsChannel") public void handleMessage(org.springframework.messaging.Message message) { System.out.println("Message [" + message.toString() + "] is received"); } } 

我刚刚测试过并运行良好:

 @Bean @ServiceActivator(inputChannel = "metricsChannel") public MessageHandler metricsHandler() { return System.out::println; } 

我已经在server部分的web-sockets 示例中完成了这项工作。 补充一下:

 compile 'org.springframework.boot:spring-boot-starter-actuator' 

到那个项目Gradle配置。

当我启动client应用程序时,我在控制台中看到了这个:

 GenericMessage [payload=Metric [name=gauge.response.time.star-star, value=26.0, timestamp=Tue Apr 14 16:03:53 EEST 2015], headers={metricName=gauge.response.time.star-star, id=08697a97-83c1-5000-f031-65f6797c0cd8, timestamp=1429016633672}] GenericMessage [payload=Metric [name=counter.status.101.time.star-star, value=1, timestamp=Tue Apr 14 16:03:53 EEST 2015], headers={metricName=counter.status.101.time.star-star, id=8d070cb4-88e8-f5a7-6b83-6b27edf75bfc, timestamp=1429016633674}] 

但是,是的:您的代码也很好。

澄清一下:我的代码确实有效,但对我而言,这感觉就像一个陷阱。

引用Spring文档:

如果’Spring Messaging’jar在您的类路径上,则会自动创建一个名为metricsChannel的MessageChannel(除非已经存在)。 所有度量标准更新事件还在该通道上作为“消息”发布。 订阅该频道的客户可以采取其他分析或行动。

因此,通过“ 所有指标更新事件 ”,我认为系统指标(内存使用情况,CPU负载等)将属于这些事件。 实际上它们不是,它们只是在您的自定义计数器更改时发布,或者例如是某个端点的请求数。

最初我在启动后每隔一秒钟等待一条消息,但无济于事。 最终开始调用度量标准端点,并且每当我调用它时,突然消息开始在控制台/通道中弹出。