由于公司很多服务要接入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的配置,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 打包所有的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>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<!-- 添加依赖的非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,因为可能有人已经遇到了
  • 多读读源码,真正的体会大牛的软件设计思想