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 读取相应配置,这就形成了循环依赖,所以首先要去除 A 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 pollo 对 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 节点中增加如下库,否则是 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 无法下载到 jar 包的。
<repository>
<id>Unidal</id>
<url>http://unidal.org/nexus/content/repositories/releases</url>
</repository>
注意:推荐使用自己 maven 打包的 cat-client,目前 Unidal 的 Maven 仓库中不是最新代码。
[](()初始化 CAT 客户端
初始化 CAT 客户端,我们要做的就是在 spring boot 初始化时,读取 Apollo 配置,再初始化 CAT 客户端。示例如下:
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import com.dianping.cat.Cat;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
/**
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整 28 天,做了份“Java 一线大厂高岗面试题解析合集:JAVA 基础-中级-高级面试+SSM 框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
且除了单纯的刷题,也得需准备一本【JAVA 进阶核心知识手册】:JVM、JAVA 集合、JAVA 多线程并发、JAVA 基础、Spring 原理、微服务、Netty 与 RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA 算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
评论