【问题标题】:Subscribe to Spring Metrics channel订阅 Spring Metrics 频道
【发布时间】:2015-04-14 12:16:32
【问题描述】:

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

【问题讨论】:

  • 你确定 Spring Boot 看到你的 MetricService 类吗?我的意思是@ComponentScan 的正确包
  • 是的,因为我测试了使用 Main 方法中的 JMS 消息传递,方法是向这个确切的类(我在此示例中删除的不同方法)发送一条消息,使用相同的注释并且有效。那么你是在暗示这段代码应该可以工作吗?

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


【解决方案1】:

我刚刚测试过,效果很好:

@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}]

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

【讨论】:

  • 如何将 SpringBoot Micrometer 指标发布到 metricsChannel 或 Stdout?
【解决方案2】:

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

引用自 Spring 文档:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 2021-01-31
    • 1970-01-01
    • 2019-10-04
    • 2015-10-14
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多