订阅 Spring 指标频道

Subscribe to Spring Metrics channel

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

REST 端点工作正常,因为我得到了预期的结果。但是我想处理指标中的每一个变化。所以它说它会默认将消息发布到名为 "metricsChannel"

的频道

我尝试创建以下 class 来收听此频道,但它似乎没有启动。 Spring 启动应用程序的其他所有内容均保持默认设置。

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;
}

我已经在 web-sockets sampleserver 部分做到了。 添加了这个:

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 文档:

If the ‘Spring Messaging’ jar is on your classpath a MessageChannel called metricsChannel is automatically created (unless one already exists). All metric update events are additionally published as ‘messages’ on that channel. Additional analysis or actions can be taken by clients subscribing to that channel.

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

最初我在启动后每秒左右等待一条消息,但无济于事。最终开始调用指标端点,每次我调用它时,消息突然开始在 console/channel 中弹出。