百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Nacos配置中心称王称霸,我Apollo一生也不弱于人

liuian 2025-03-19 14:14 32 浏览

前言

Apollo又称阿波罗配置中心,在前两年还是挺火的,但阿里SpringCloud套件席卷国内之后,nacos就成为了最被亲睐的分布式配置中心,nacos是配置中心和注册中心二合一的产品,单纯功能上Apollo其实更强大一些。本篇就把Apollo的安装及使用分享给大家。


安装

1、安装包

1)、GitHub下载:
https://github.com/nobodyiam/apollo-build-scripts

2)、网盘下载:
https://github.com/ctripcorp/apollo/wiki/Quick-Start(看这个文档下面给的网盘链接)

2、环境要求

虚拟机:内存2G+

JDK:java1.8k环境

数据库:mysql在5.7+(如果在低版本数据库执行阿波罗结构时,默认是不能支持在一个表中有两个时间戳类型字段,所以建议大家使用mysql在5.7以上。)

3、创建数据库表

去Github上下载最新的
apollo-build-scripts-master 整个阿波罗环境包

创建两个数据库


apollo-build-scripts-master\sql目录下有两个SQL文件:分别为:apolloconfigdb(存放配置文件信息)、apolloportaldb(门户网站),在数据库中执行创建;

4、修改SQL脚本

修改apollo安装脚本demo.sh,修改其中的数据库连接信息和相关服务地址信息。

5、启动

执行命令:./demo.sh start

PS:记得关闭防火墙,如果连的是远程数据库,记得开放mysql用户的权限,root@'%',也别用本机数据库,虚拟机可能ping不通本机,连不上本机数据库。

6、访问

启动后,访问地址:
http://192.168.121.129:8070

默认账号密码:apollo admin

7、简单使用

1)、创建项目

2)、新增配置

3)、点击发布


常规用法

注意:

1)、这里示例使用的是renren-fast,是单一项目,所以就创建一个apollo项目即可,然后可以创建多个namespace,存放不同环境的配置文件(开发、测试、生产);

2)、如果是微服务项目,那么给每一个微服务都创建一个apollo项目,应用ID是每个微服务的appId,应用名称也尽量见名知意。

1、删除示例项目

2、创建新项目

3、命名空间

可以创建不同环境的配置文件命名空间,并且可以展开伸缩。

PS:这里是测试,真实环境最好按照规范比如renren.user这样来命名。

4、yml命名空间

如果是yml命名空间,就直接文本拷贝进来。

如果是默认的properties命名空间,自己项目的配置是yml格式,就要先进行转换,然后拷贝到文本中。

yml转properties转换工具:yml转properties工具

拷贝到文本中

它会自己转换

最后点击发布即可


SpringBoot整合

1、问题说明

使用阿波罗注意事项:

1)、本地缓存地址:windows:C:\opt\data\,Linux:/opt/data

2)、本地环境设置地址:windows:C:\opt\settings,Linux:/opt/settings

3)、如果配置完成后可以读取到apollo发布的配置信息,但是修改后再发布,发现项目获取不到最新的,需要检查一下本地缓存地址data目录下的配置文件是否更新,或者是否存在这个缓存文件,如果不存在,说明根本没有缓存成功,这个命名空间大概有问题。

PS:这里笔者出现的问题就是本地根本没缓存application-dev这个命名空间的配置信息,因为我创建的时候用的是yml格式,删掉后我改用properties格式,然后就可以了。

2、前情回顾

在前面搭建Apollo环境OK的前提下,这是案例环境的截图,有四个命名空间。

3、官方文档

1)、Apollo使用指南:
https://github.com/ctripcorp/apollo/wiki/Apollo使用指南

2)、java样例客户端启动:
https://github.com/ctripcorp/apollo/wiki/Apollo开发指南#23-java样例客户端启动

3)、spring-boot集成方式推荐:
https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南#3213-spring-boot集成方式推荐

4、引入依赖



    com.ctrip.framework.apollo
    apollo-client
    1.1.0




    com.ctrip.framework.apollo
    apollo-core
    1.1.0
5、配置文件

删掉项目原本的application.yml等配置文件,在resources下新建一个application.properties文件。

app.id=renren-fast

apollo.meta=http://192.168.1.128:8080

# 注入非默认application namespace或多个namespace的配置示例

apollo.bootstrap.enabled=true

apollo.bootstrap.namespaces=application,application-dev,application-prod,application-test

6、启动注解

启动类加上开启Apollo的注解:@EnableApolloConfig

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

@EnableApolloConfig

public class RenrenApplication extends SpringBootServletInitializer {    

    public static void main(String[] args) {

        SpringApplication.run(RenrenApplication.class, args);

    }    

    @Override

    protected SpringApplicationBuilder configure(SpringApplicationBuilder app) {        

        return app.sources(RenrenApplication.class);

    }

}


7、修改环境

可选项,这个
settings/server.properties也可以不创建,在需要切换不同环境时才需要。

修改
/opt/settings/server.properties(Mac/Linux)或 C:\opt\settings\server.properties(Windows)文件,没有目录就新建出来,设置env为DEV:env=DEV

说明:

1)、这个环境配置的意义,可以参考:
https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南#3213-spring-boot集成方式推荐,搜索关键字env=DEV,也可以自己去网上找资料;

2)、这个C:\opt\settings\server.properties是需要自己创建的,不会自己生成。

8、本地缓存

阿波罗在本地的缓存地址,缓存的其实就是这些配置文件,如果阿波罗挂掉了,项目会访问这个缓存文件,也不影响项目运行。

9、验证

测试一个接口看是否能获取到配置信息

启动后访问接口

查看是否有打印出数据源url

修改一下配置后再发布,看是否会刷新:发现删掉的部分已经没了。


Java动态读取配置

此案例参考了每特教育的案例:

网关内集成了swagger文档,把swagger写死的部分作为json保存在apollo中,网关服务通过java代码动态获取apollo保存的json信息,赋给swagger文档实现。

1、网关代码

@SpringBootApplication

@EnableEurekaClient

@EnableZuulProxy

@EnableSwagger2Doc

@EnableApolloConfig

public class AppGateWay {




      // 获取ApolloConfig      

      @ApolloConfig      

      private Config appConfig;




      public static void main(String[] args) {

            SpringApplication.run(AppGateWay.class, args);

      }




      // 添加文档来源      

      @Component      

      @Primary      

      class DocumentationConfig implements SwaggerResourcesProvider {




            @Override            

            public List get() {

                  // 开启监听,配置文件发生改变需要更改                  

                  appConfig.addChangeListener(new ConfigChangeListener() {




                       @Override                       

                       public void onChange(ConfigChangeEvent changeEvent) {

                             get();

                       }

                  });

                  return resources();

            }




            /**

             * 从阿波罗服务器中获取resources

             *

             * @return             

             */            

            private List resources() {

                  List resources = new ArrayList<>();

                  // app-itmayiedu-order                  

                  // 网关使用服务别名获取远程服务的SwaggerApi                  

                  String swaggerDocJson = swaggerDocument();

                  JSONArray jsonArray = JSONArray.parseArray(swaggerDocJson);

                  for (Object object : jsonArray) {

                       JSONObject jsonObject = (JSONObject) object;

                       String name = jsonObject.getString("name");

                       String location = jsonObject.getString("location");

                       String version = jsonObject.getString("version");

                       resources.add(swaggerResource(name, location, version));

                  }

                  return resources;

             }




            /**

             * 获取swaggerDocument配置

             * 这里使用apollo提供的config来获取mayikt.zuul.swaggerDocument这个key对应的json值

             * @return             

             */            

            private String swaggerDocument() {

                  String property = appConfig.getProperty("mayikt.zuul.swaggerDocument", "");

                  return property;

            }




            private SwaggerResource swaggerResource(String name, String location, String version) {

                  SwaggerResource swaggerResource = new SwaggerResource();

                  swaggerResource.setName(name);

                  swaggerResource.setLocation(location);

                  swaggerResource.setSwaggerVersion(version);

                  return swaggerResource;

            }

      }




}

2、新建key-value

在apollo中对应的命名空间内新建一个key-value:
mayikt.zuul.swaggerDocument,对应上面config.getProperty("
mayikt.zuul.swaggerDocument",""),后面空表示没取到就返回空串。

key:mayikt.zuul.swaggerDocument

value是如下内容:

[
    {
        "name": "app-mayikt-member",
        "location": "/app-mayikt-member/v2/api-docs",
        "version": "2.0"    
    },    
    {
        "name": "app-mayikt-weixin",
        "location": "/app-mayikt-weixin/v2/api-docs",
        "version": "2.0"    
    }

]


监听Apollo

PS:这个监听类会在项目启动后自动开启一个线程和apollo建立长连接,监听apollo配置的变化并打印出日志。切忌使用AOP或者放在get方法里面,这样会开启很多线程和apollo连接,导致系统CPU飙高。

新增下面一个监听类即可:

@Component

@Slf4j

public class MyCommandLineRunner implements CommandLineRunner {




      @ApolloConfig      

      private Config config;




      @Override      

      public void run(String... args) throws Exception {

        config.addChangeListener(new ConfigChangeListener() {                         @Override

            public void onChange(ConfigChangeEvent changeEvent) {

                   log.debug("分布式配置中心监听: {}", changeEvent.changedKeys().toString());

            }

        });

      }

}

总结

Apollo配置中心是携程团队精心创作的开源产品,哪怕现在Nacos如日中天,Apollo也依然受到很多项目团队的欢迎。有些公司的研发团队开发项目并不一定会使用阿里微服务套件,像Apollo这样的组件就会成为选项之一,大家感兴趣的话可以尝试一下新版本的使用,也可以收藏本篇,以后若用到翻出来参考即可。

分享

8年多工作及学习过程中在云笔记中记录了很多内容,其实还有很多我闲暇之余都做了下整理,有感兴趣的朋友可以下载看看,什么时候用到了翻开说不定就能节省很多时间。

如果有感兴趣的朋友,直接私信回复【资源】即可,完全免费分享。

本人原创文章纯手打,觉得有一滴滴帮助就请点个吧~

本人持续分享实际工作经验和主流技术,喜欢的话可以关注下哦~

转自:
https://juejin.cn/post/7105651071166447647

END

相关推荐

win8手机下载安装(win8安卓)

在电脑上面就可以下载,打开浏览器搜索windous8系统会出现一些下拉选择,选择第一条或者选择有官网字样的,就直接有下载按钮,然后点击下载就可以了关闭应用自动更新第一步、在系统中找到应用商店。第二...

台式电脑显卡怎么升级(台式电脑显卡升级方案)

一般情况下,建议到产品(您的显卡)品牌官网上去下载相应最新的驱动,这虽然并不能保证一定就是显卡最新的驱动,但相对于稳定性来说是首选。如果是高级玩家,追求更新、更好的性能发挥,可以利用驱动精灵一类的驱动...

u盘数据丢失的原因(u盘数据丢失的原因有哪些)

U盘出现了损坏造成的磁道出现了损坏。这个U盘的磁道是最容易损坏的,有的时候你不知道怎么碰到它,它就有数据丢失了就无法显示这样的情况,你可以在电脑上进行修复,首先你点击U盘右键找到属性选择修复,这样把...

window7下载哪个版本的ie(windows7用哪个版本的ie浏览器)

WIN7系统自带的IE浏览器是8.0版本的。IE全称InternetExplorer,是美国微软公司推出的一款网页浏览器。IE8扩展的新功能有:1、Activities(活动内容服务)。用户可以从网页...

服务器回收(上海服务器回收)

回收服务器内存后,首先应该彻底清除内存存储的所有数据和敏感信息,然后进行分类处理。如果内存仍然有效,可以进行检测、测试和修复后再重新使用。如果内存已损坏或过期,应该妥善处理,比如通过专业的硬件回收公司...

戴尔官网入口学生通道(戴尔学生渠道)

戴尔官网地址如下,在浏览器输入就可以加入了。DELL官方网站http://www.dell.com.cn/DELL官方旗舰店(天猫)http://dell.tmall.com/DELL官方旗舰店(京东...

win7旗舰版激活码病毒(win7旗舰版激活密钥 永久激活码)

激活和破解工具会修改一些系统文件或数据,一般都会被杀毒软件识别为木马。而且现在网上的windows和office激活工具有的确实是带有木马的,最好去值得信任的网站或者论坛下载。

破解版office2019百度云(破解版office2016百度云)
  • 破解版office2019百度云(破解版office2016百度云)
  • 破解版office2019百度云(破解版office2016百度云)
  • 破解版office2019百度云(破解版office2016百度云)
  • 破解版office2019百度云(破解版office2016百度云)
421文档 全文免费阅读(421小说在线阅读)

根据1,我回答如下:1,"421文档"是在4月21日发布的。2,"421文档"作为一份重要的文件,通常在特定日期或时间点发布,供相关人员参考和使用。3,除了发布日...

阿里旺旺网页版登录入口(阿里旺旺卖家版官网)

手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。  阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...

网易电脑版登录入口(main.163网易电脑版登录入口)

http://mail.163.com步骤一:输入邮箱官网网址http://mail.163.com/打开163邮箱登录入口界面。步骤二:输入已有的邮箱账号、密码,点击登录即可。步骤三:如果没有邮箱账...

qq截图快捷键不能用(qq快捷截图不能使用)

笔记本上面的PrtSC能用么,是不是需要用Fn+这个按键才能截屏呀。有些机器在bios下有Fn快捷键设置,你需要把这个功能键开启或者关闭后才能单独点击使用。或者你使用Fn+PrtSC在试试,另外,何必...

大地影视中文第二页的背景故事

大地影院通常会有明显的入口标识,你可以根据影院外部的建筑结构和指示牌来找到入口。一般来说,大地影院的入口可能位于建筑的主立面或者侧面,有时也可能位于地下停车场或者商场内部。当你到达影院所在的建筑时,可...

win10共享打印机需要密码(win10共享打印机需要密码吗)

共享打印机需要输入用户名和密码,该如何操作,下面给大家来介绍下。1、首先打开电脑的控制面板,点击管理工具。2、然后在打开的管理工具窗口中,点击本地安全策略。3、接着在打开的页面中,点击本地策略。4、然...

系统引导启动项怎么设置(系统引导按哪个键)

如果您想在计算机启动时添加系统启动引导选项,可以按照以下步骤进行操作:1.打开“运行”窗口,可以通过快捷键Win+R打开“运行”窗口。2.在“运行”窗口中输入“msconfig”命令,并点击“...