因此,根据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");
}
}
答案 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负载等)将属于这些事件。实际上它们不是,只要您的自定义计数器发生更改,或者例如某个端点的请求数量,它们就会被发布。
最初我在启动后每隔一秒钟等待一条消息,但无济于事。最终开始调用指标端点,每次调用它时,突然消息开始在控制台/通道中弹出。