Spring Cloud :7 . Config 配置中心

配置中心以及应用场景

SpringCloud Config是个用于大型的分布式微服务系统当中,这样的系统,微服务往往会成百上千个,也就有意味着有成百上千份配置文件。如果业务要求更改配置文件,再没有配置中心的情况下,需要对每台服务器进行单独更改,耗时耗力并且非常繁琐,因此我们需要配置中心对配置文件进行 统一分类管理、动态更改配置参数,可以有效的提高工作效率。

微服务加载配置文件流程

在这里插入图片描述

SpringCloud Config +GitHub单机搭建

通过Config Server 访问git上面的配置文件
  1. 首先在Github上面建立一个仓库,用于存放配置文件:

在这里插入图片描述

  1. 然后把以前项目的配置文件随便上传到这个仓库中一份(配置文件要改一个有标志性的名字):

在这里插入图片描述

  1. 创建SpringCloud Config 服务,引入依赖 并且在启动类上添加@EnableConfigServer注解:
        <!--健康监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- config Server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfigCenter7777Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigCenter7777Application.class, args);
    }

}
  1. 配置文件:
spring.application.name=spring-cloud-config-center
server.port=7777
#仓库地址
spring.cloud.config.server.git.uri=https://github.com/z8524210/spring-cloud-configtest.git
#读取的分支
spring.cloud.config.label=master
#Eureka交互地址
eureka.client.service-url.defaultZone=http://euk1.com:7001/eureka/
  1. 访问 (localhost:端口/分支/文件名) http://localhost:7777/master/openFeignProvider-dev.properties 获得配置信息 :

在这里插入图片描述

微服务从 Config Server 拉取 Github 上的配置文件

需要注意的是:在github仓库的配置文件名称必须和注册到 Eureka 的服务名称相同,不然会找不到配置文件。

添加依赖:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

修改配置文件名称 application.properties(优先级低) —> bootstrap.properties (优先级高) ,并添加配置:

spring.application.name=open-feign-provider

#直接URL方式查找配置中心,和通过注册中心查找二选一
spring.cloud.config.uri=http://localhost:7777/

#通过注册中心查找,当然,如果通过Eureka,需要把Eureka的注册地址卸载本地
#eureka.client.service-url.defaultZone=http://euk1.com:7001/eureka/
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.service-id=spring-cloud-config-center

#git上配置文件的环境
spring.cloud.config.profile=dev
#支线名称
spring.cloud.config.label=master

虽然并没有配置启动接口,但是启动后发现启动接口为7002 :

在这里插入图片描述

SpringCloud Config 微服务热刷新配置

单机热更新
  1. 引入依赖:
		<!--服务监控,手动热刷新其实是actuator暴露出来的http接口实现刷新的 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. 配置文件:
#actuator暴露所有接口
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
  1. 在Controller上添加@RefreshScope注解:
@RestController
@RefreshScope
public class UesrController implements UserAPI {
...

  1. 重启这个服务,查看暴露出来的接口:

在这里插入图片描述
5. 修改git 配置文件的端口号,然后访问 http://localhost:7902/actuator/refresh ,查看效果:

在这里插入图片描述
用post访问接口:

在这里插入图片描述
查看端口:

在这里插入图片描述

突然发现这里有个坑,配置文件确实改了,访问获取端口号能获取到7903. 但是访问的时候,还是需要7902的端口访问。

集群热更新

在这里插入图片描述

自动热更新需要使用 SpringCloud Bus 组件(消息总线),它的底层是MQ,可以把它想象成一个容器,所有的微服务都可以和它建立连接点,当SpringCloud ConfigServer发送消息到 Bus 中时,所有的微服务都会收到通知并重新加载Git上的配置文件。

而 Bus 中的可以集成的 MQ 必须支持 amqp 协议(大致的意思就是统一接口),现在 Bus 中所支持的MQ 只有两种 :rabbiteMQ(应用开发) 和 kafka(中转开发) 。

先使用Docker容器安装 rabbiteMQ
  1. 首先安装Docker :
yum install docker  #安装Docker
  1. 启动Docker容器,并且设置开机启动
systemctl start docker.service
chkconfig docker on  
  1. 因为下载镜像较慢,所以配置 aliyun 的服务镜像(CentOS7):
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://j2n2rp9s.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docke
  1. 拉取 rabbiteMQ 的镜像:
docker pull rabbitmq:3-management  
  1. 启动rabbiteMQ 镜像:
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
  1. 然后访问安装 Docker 容器的 http://IP:15672

在这里插入图片描述

然后配置微服务
  1. 给需要集群热部署的添加依赖:
		<!--bus默认集成stream ,stream默认集成rabbiteMQ-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
  1. 添加对rabbiteMQ的配置:
spring.application.name=open-feign-provider

########### 配置中心 ##############################

#直接URL方式查找配置中心
spring.cloud.config.uri=http://localhost:7777/
#通过注册中心查找
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.service-id=a-config

#git上配置文件的环境
spring.cloud.config.profile=dev
#支线名称
spring.cloud.config.label=master

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

##########rabbite配置###########################
spring.rabbitmq.host=192.168.116.141
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
  1. 访问 http://localhost:7903/actuator 会发现多出一个 bus-refresh 的接口:

在这里插入图片描述
4. 修改git上面的配置文件之后,可以使用 refresh 接口单独刷新配置文件,确保没有出现问题再使用 bus-refresh 接口 刷新整个集群的配置文件。

在这里插入图片描述

还可以把 Bus 配置到Config Server 上,然后直接访问 Config Server 的 bus-refresh 接口就可以了。同时还可以通过 http://localhost:7903/actuator/bus-refresh/{destination} 来指定服务名称来指定集群更新 。


就到这里吧,说实话 bus 我并没有使用过,只是一直没有间断学习,听网课+查资料 整理出的自己理解,并不保证 正确性,只是希望可以和大家一起学习进步,如果有错误的地方,欢迎大家留言指正。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值