CAT客户端如何从Apollo中读取配置?
运行环境
以下就是这个示例的运行环境,如果版本号不一样,区别也应该不会很大,可以根据实际情况做相应调整。
- JDK 8
- spring boot 2.0.7.RELEASE
- cat-client 3.0.0
- apollo-client 1.3.0
去除Apollo对CAT的依赖
众所周知,Apollo对CAT是有依赖的,但不是强依赖,而是使用了SPI技术,只有项目里引用了cat-client才会生效。目前我们想把CAT客户端配置放在Apollo里,也就是在CAT客户端初始化之前从Apollo读取相应配置,这就形成了循环依赖,所以首先要去除Apollo对CAT客户端的依赖。
查看Apollo客户端的源码,我发现有一个叫做MessageProducerManager
的接口,再看一下META-INF\services\com.ctrip.framework.apollo.tracer.spi.MessageProducerManager文件,发现这个接口的默认实现是DefaultMessageProducerManager
,如果发现CAT客户端被引入时,这个类就会初始化CAT客户端并向CAT客户端发送消息。MessageProducerManager
接口还有另外一个实现,就是NullMessageProducerManager
类,这个类返回的是NullMessageProducer实例,任何消息都不发送。
想要去除CAT的依赖,在项目里使用NullMessageProducerManager
的实现就可以了。在META-INF\services\文件夹中创建如下文件:com.ctrip.framework.apollo.tracer.spi.MessageProducerManager
并添加如下内容:com.ctrip.framework.apollo.tracer.internals.NullMessageProducerManager
引入CAT客户端
引入CAT客户端时,我遇到的一个大坑,所以告诫大家:千万不要使用源码中cat-client打包出来的客户端。因为源码中的cat-client是旧代码,已经不维护了。这里吐槽一下:不维护了为什么不马上删除,害的我读了一个星期的旧代码。最新的源码在lib/java目录下,可以自己用maven打包,或者在pom.xml添加Maven依赖:
<dependency> <groupId>com.dianping.cat</groupId> <artifactId>cat-client</artifactId> <version>3.0.0</version> </dependency>
另外,还有在repositories节点中增加如下库,否则是无法下载到jar包的。
<repository> <id>Unidal</id> <url>upload/201911111653262680.jpg" style="margin: 0px; padding: 0px; border: 0px; width: 150px; height: 150px;" alt="" />
出处:http://www.cnblogs.com/heihaozi/
版权声明:本文遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
微信扫描二维码,关注万猫学社,获得更多Java技术干货。https://www.cnblogs.com/heihaozi/p/11827395.html