Java 订阅Spring Metrics频道
因此,根据Spring的文档,它将在REST端点和消息通道上发布度量 REST端点工作正常,因为我得到了预期的结果。但是,我希望处理度量中的每个更改。所以它说,默认情况下,它会将消息发布到一个名为“metricsChannel”的频道 我试图创建下面的类来收听这个频道,但它似乎没有启动。对于Spring引导应用程序,其他所有内容都保持默认状态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
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或标准输出?