订阅Spring Metrics频道

时间:2015-04-14 12:16:32

标签: java spring spring-mvc spring-boot spring-integration

因此,根据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");
    }
}

2 个答案:

答案 0 :(得分:1)

我刚测试过并且效果很好:

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

我已经在web-sockets部分server sample上完成了这项工作。 补充一点:

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

到该项目Gradle config。

当我启动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}]

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

答案 1 :(得分:0)

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

引用Spring文档:

  

如果'Spring Messaging'jar在你的类路径上是一个MessageChannel   称为metricsChannel是自动创建的(除非已经创建了一个)   存在)。 所有指标更新事件另外发布为   该频道上的“消息”。可以进行额外的分析或行动   由订阅该频道的客户拍摄。

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

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