写点什么

CAT 客户端如何从 Apollo 中读取配置?

  • 2022 年 4 月 20 日
  • 本文字数:1513 字

    阅读完需:约 5 分钟

  • 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、机器学习、云计算,用来查漏补缺最好不过。



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
CAT客户端如何从Apollo中读取配置?_Java_爱好编程进阶_InfoQ写作社区