蓝盟IT小贴士,来喽!
Dubbo有现成的实现吗?
应该没有完全的实现。 至少我还没用过。 也没有像去搜索引擎找结果那样的现状。 因此,我在Dubbo的Github上找到了相关项目的dubbo-spring-boot-actuator。
3359 github.com/Apache/dubbo-spring-boot-project /树/主/双头螺旋线引导器
Dubbo-spring-boot-actuator从名字就可以看出,提供了与dubbo相关的各种信息网站和健康诊断。 你可能会从这里面发现有用的代码。
果然,在介绍页面上可以看到想要的内容,线程池的指标数据只不过切换为字符串表示。
然后我翻了dubbo-spring-boot-actuator的代码,但是没有找到线程池这个代码。 在dubbo.jar中发现了一个名为ThreadPoolStatusChecker的类。 核心逻辑在这里。 现在,第一个问题是获取Dubbo的线程池对象。
参考中指在micrometer上的实现,葫芦画葫芦?
可以获得线程池对象,也可以获得各种数据。 下一个问题是如何暴露在prometheus中进行采集。
两种方法是定制新端点的曝光,以及直接在现有的prometheus端点上添加指标数据的输出,即根据葫芦画瓢。
源代码中已经安装了很多Metrics,我们也可以安装Dubbo线程池的Metrics。
实现的主要逻辑是实现MeterBinder接口,输出必要的指标。 于是,我打算用bindTo方法获取Dubbo的线程池对象,并输出指标。 测试结果显示,在实例化MeterBinder时未初始化Dubbo,未得到线程池对象,绑定后无法正常输出指标。
之后还是打算以定时采样的方式输出,定制一个后台线程,定时输出数据。 可以使用Timer。 我的图简单地直接循环了while。
文/上海蓝盟 IT外包专家