Apollo Client自定义问题拾遗

由于公司很多服务要接入Apollo配置中心,并且对于项目的接入有网络要求,根据官方说明,需要自定义Client来完成 接入步骤 新建maven项目 在Idea中新建maven项目,基于quickstart构建 增加项目依赖 官方说明的建议在新的client中依赖Apollo官方的client,再根据业务进行扩展,所以maven依赖apollo-client,公司项目的网络访问需要通过L5来进行,所以还要依赖L5的jar,目前这个jar包没有maven坐标,只能以lib方式引入 自定义MetaServer 关键的部分,自定义满足公司网络条件的MetaServer,Apollo官网说明是实现MetaServerProvider且Order值小的Providor被使用,按照说明进行实现 Maven打包Client 执行 mvn clean install 进行打包,解压jar包发现就只有一个Providor的实现类,这样jar运行有问题。需要把新Client所有的依赖都打进jar包,在网上找了半天,需要在POM中增加maven的plugin的配置,如下: <!-- 打包所有的maven依赖到jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <exclude>junit:junit</exclude> </excludes> </artifactSet> </configuration> </execution> </executions> </plugin> <!-- 添加依赖的非maven jar包 --> <plugin> <groupId>com.googlecode.addjars-maven-plugin</groupId> <artifactId>addjars-maven-plugin</artifactId> <version>1.0.5</version> <executions> <execution> <goals> <goal>add-jars</goal> </goals> <configuration> <resources> <resource> <directory>${basedir}/lib</directory> </resource> </resources> </configuration> </execution> </executions> </plugin> 由于项目中使用了maven依赖与非maven依赖,所以上述的两个插件都要使用。增加了上面两个插件后再运行打包命令查看生成的jar就发现所有的依赖都在jar中了。 项目中使用Client 选择一个项目在测试环境进行配置调试,自定义的Meta Server一直没有生效,所以查找官方文档,由于自定义Providor是通过SPI方式实现的,所以正确的实现方式是新建resource文件夹,指定MetaServerProvider的真正实现类的带包名类才可以,哎,找了我好久。 后续操作 后续会把client上传到内部maven仓库,完善配置API,使业务方可以零配置来使用配置中心。 总结 Maven的打包机制还是不清晰,处理打包问题费了很多时间,要好好重新学习一下 Apollo的官方文档还需要再仔细阅读,有问题多查issue,因为可能有人已经遇到了 多读读源码,真正的体会大牛的软件设计思想

July 1, 2019 · 1 min · 70 words · tomyli