Java 订阅Spring Metrics频道

Java 订阅Spring Metrics频道,java,spring,spring-mvc,spring-boot,spring-integration,Java,Spring,Spring Mvc,Spring Boot,Spring Integration,因此,根据Spring的文档,它将在REST端点和消息通道上发布度量 REST端点工作正常,因为我得到了预期的结果。但是,我希望处理度量中的每个更改。所以它说,默认情况下,它会将消息发布到一个名为“metricsChannel”的频道 我试图创建下面的类来收听这个频道,但它似乎没有启动。对于Spring引导应用程序,其他所有内容都保持默认状态 package services.core; import org.springframework.stereotype.Service; import

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

REST端点工作正常,因为我得到了预期的结果。但是,我希望处理度量中的每个更改。所以它说,默认情况下,它会将消息发布到一个名为“metricsChannel”的频道

我试图创建下面的类来收听这个频道,但它似乎没有启动。对于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");
    }
}
package services.core;
导入org.springframework.stereotype.Service;
导入org.springframework.integration.annotation.ServiceActivator;
@服务
公共类度量服务{
@ServiceActivator(inputChannel=“metricsChannel”)
public void handleMessage(org.springframework.messaging.Message){
System.out.println(“接收到消息[“+Message.toString()+”);
}
}

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

@Bean
@ServiceActivator(inputChannel = "metricsChannel")
public MessageHandler metricsHandler() {
    return System.out::println;
}
我在
服务器
部分的
websockets
中完成了这项工作。 补充如下:

compile 'org.springframework.boot:spring-boot-starter-actuator'
到Gradle配置项目

当我启动
客户端
应用程序时,我在控制台中看到了这一点:

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位于类路径上,则为MessageChannel 自动创建被调用的metricsChannel(除非已经创建了一个) 存在)所有度量更新事件另外发布为 该频道上的“消息”。可以进行其他分析或操作 由订阅该频道的客户端拍摄

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


起初,我在开机后大约每秒钟都在等待一条消息,但没有结果。最终开始调用metrics端点,每次我调用它时,控制台/通道中突然出现消息。

您确定Spring Boot会看到您的
MetricService
类吗?我的意思是
@ComponentScan
的正确包是的,因为我使用来自Main方法的JMS消息传递进行了测试,将消息发送到这个具有相同注释且有效的类(本例中删除的不同方法)。那么,您是在暗示这段代码应该可以工作吗?如何将SpringBoot测微计度量发布到metricsChannel或标准输出?