手写springCloud微服务架构的电商项目(第三天)

一、前言

今天的任务是搭建项目的分布式配置中心,将所有项目的配置文件统一管理起来。同时实现配置文件的实时刷新,这也是最重要的原因,意思就是说我们修改了项目的配置文件,不需要再重新启动,只需要将配置文件发布到分布式配置中就ok了。现在市面有很多分布式框架,原理都是大同小异,springCloud自己也有分布式配置中心框架springCloud config,配置文件统一使用git存储,ConfigServer会将配置文件从git上拉取下来缓存起来,所以我们只需要将ConfigServer服务注册到注册中Eureka中,各个服务就能通过ConfigServer获取到配置文件。这个项目使用的是携程的阿波罗分布式配置中心。

二、阿波罗的原理分析

阿波罗配置中心的核心的服务其实也是configServer,只是又在次基础上开发了web页面,让用户更好的去维护配置文件。应用(Apollo客户端)相当于我们之前写的微信和会员服务,阿波罗的文件信息是存放在db中的,这是跟springCloud config不一样的地方。阿波罗的原理,总结成以下几点内容:

1.客户端与服务器端保持一个长连接,当配置文件更新时,服务器端会向客户端推送更新,同时客户端会定时从服务器端做更新,这个思想其实跟我们之前做缓存框架时遇到的问题非常相似,就是redis的数据和数据库的数据不同步怎么办?其实Apollo就告诉了我们答案:1.当数据库内容发生改变时,主动通知给redis,2.启动定时任务,从数据库取数据。

2.Apllo客户端为什么要做本地缓存呢,当网络不可达时或者网络不通时,客户端依然能获取到配置文件。

3.应用程序从Apollo客户端获取配置文件的更新通知。

准备环境(Linux下安装):

1.java1.8版本

2.mysql5.7.27(建议5.7以上)

安装之前安装阿里云的加速镜像,不然下载镜像时会特别卡,只需要执行以下命令:

1.mkdir -p /etc/docker
2.tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://km2dy41r.mirror.aliyuncs.com"]
}
EOF
3.systemctl daemon-reload
4.systemctl restart docker

 

使用docker安装mysql只需要3个命令:

1.systemctl start docker
2.docker pull mysql:5.7.27
3.docker run --name mysql -p 3306:3306 -v /mysql/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  -d mysql

上面的准备完成后开始搭建阿波罗:

①.创建2个数据库,分别执行源码sql文件夹中的2个sql文件,第一个数据库时存放配置文件信息的,第二个是存放阿波罗门户信息的数据库,也就是给用户来增删改查配置文件用的,因为两个是不同的服务,所以需要建两个数据库。

②将源码包上传到linux,修改demo.sh文件

 

解释一下:config_server就是配置中心的服务器端,admin_server你可以理解为portal的后台,也就是用户在增删改查配置文件的后台应用,上面我们已经分析了阿波罗需要依赖于注册中心,阿波罗里也有注册中心,所以它会有一个eureka_server,最后的portal_server就是我们用户用来增删查改配置文件的前端应用。

③启动命令:

./demo.sh start

我们发现configServer注册到了eureka中

我们使用账号Apollo/Admin进行登录,现在看到的这个页面就是Apollo的portal服务,意思就是门户的意思,可以理解成前端(我自己个人的理解)。

三、apollo与我们的项目进行整合。

①创建微信项目,每一个项目会对应一个appId,以此来区分不同项目的配置文件,上传配置文件。

②加入pom依赖,最好加再父工程中,可以避免重复引入

<!-- apollo 携程apollo配置中心框架 -->
<dependency>
	<groupId>com.ctrip.framework.apollo</groupId>
	<artifactId>apollo-client</artifactId>
	<version>1.0.0</version>
</dependency>
<dependency>
	<groupId>com.ctrip.framework.apollo</groupId>
	<artifactId>apollo-core</artifactId>
	<version>1.0.0</version>
</dependency>

③创建application.properties,指定apollo的注册中心的地址和appId

④见证奇迹的时刻,首先创建一个测试类,userName在阿波罗的值是ruanhangyu234,然后访问看看结果

然后我们在页面上修改这个值,点击发布,无需重启服务器,这个值就会自动刷新。这也是使用配置中心最重要的原因。

至此,分布式配置中心搭建完成,青春未完待续。。。

 


版权声明:本文为qq_29252775原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。