SpringCloud系列之分布式配置中心极速入门与实践

可以自行在maven引入如下配置:

org.springframework.cloud spring-cloud-config-server 使用注解@EnableConfigServer表示这个config服务端工程

package com.example.springcloud.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class SpringcloudConfigServerApplication {

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

}

新建bootstrap.yml配置文件,指定github仓库的地址:

server:
port: 8761
spring:
application:
name: springcloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/your_github_account/springCloudExamples
username: your_github_account
password: your_github_password
search-paths: config-repository
5、Config Client代码实现
同样新建SpringBoot Initialize项目,快速创建
在这里插入图片描述
pom配置文件:

org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-config yaml配置,uri指定为config server的地址,profile是环境变量,可以指定为dev(开发环境),label表示分支,master是指github的主干分支

server:
port: 8082
spring:
application:
name: springcloud-config-client
cloud:
config:
uri: http://127.0.0.1:8761/
profile: dev
label: master

然后,我们要在github仓库新建配置文件:命名规范必须是客户端的spring. application.name加上profile
在这里插入图片描述
在配置文件,随便写点:

config.client.profile=springcloud-config-client-dev
测试:要先启动config server,然后再启动config client,写个例子测试,要加上@RefreshScope实现刷新功能

@RestController
@RefreshScope
public class ConnfigClientController {

@Value("${config.client.profile}")
private String profile;

@GetMapping(value = "/test")
public String test() {
    return this.profile;
}

}

启动SpringBoot项目,测试:
在这里插入图片描述
在config server启动过程,可以看到config server从github下拉配置文件到本地缓存,具体是C盘AppData目录
在这里插入图片描述

6、客户端pull刷新实现
客户端要实现下拉配置数据,怎么实现?可以集成spring-boot-starter-actuator来实现:

pom配置:

org.springframework.boot spring-boot-starter-actuator spring-boot-starter-actuator配置:include加上rehresh配置

management:
endpoints:
web:
# 前缀名,默认也是actuator
base-path: /actuator
# 默认只开放info,health的方式访问,加上refresh
exposure:
include: info,health,refresh
endpoint:
health:
show-details: always
refresh:
enabled: true

访问客户端的链接,注意要用post方式,http://localhost:8082/actuator/refresh

github配置文件没更新的情况:
在这里插入图片描述
修改配置文件,commit和push到github
在这里插入图片描述
调用接口时候,可以看到config client从config server获取数据:
在这里插入图片描述

7、消息总线Spring Cloud Bus
什么是总线?
在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都链接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。
什么是Spring Cloud Bus?
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能

Spring Cloud Bus能管理和传播分布式消息间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道

看了理论,貌似不理解?所以还是从前面学习说起,前面介绍说明作为一个分布式的配置中心,至少应该有推送消息的功能,所以这个配置中心的角色可以由config server充当,实现的效果是config server(配置中心)一刷新数据,客户端都能同步更新,画图进行说明:
在这里插入图片描述

1、配置中心(config server)执行bus-refresh,spring cloud bus提供的刷新接口,配置中心就从git仓库下拉数据到本地git仓库
2、执行bus-refresh之后,将消息发给spring cloud bus(消息总线),消息总线将消息写到消息队列(rabbitMQ)的topic中
3、只要订阅这个消息队列topic的都能监听到spring cloud bus的消息(基于rabbitmq)
4、监听到之后,config client从config server pull更新配置数据
其实简而言之,Config Client实例都监听RabbitMQ中同一个topic,当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置,当然这个刷新操作不一定要放在config server,也可以放在某个客户端触发,只要将消息发送给消息总线就可以

8、Docker安装部署RabbitMQ
主要介绍一下Docker版本,常用的docker镜像操作:
在这里插入图片描述

查询rabbitMQ镜像:

management版本,不指定默认为最新版本latest

docker search rabbitmq:management
在这里插入图片描述
拉取镜像:

docker pull rabbitmq:management
查看docker镜像列表:

docker images
Docker容器操作:
ok,上面命令执行后,镜像就已经拉取到本地仓库了,然后可以进行容器操作,启动rabbitMQ

简单版

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
-d 后台运行
-p 隐射端口
–name 指定rabbitMQ名称
复杂版(设置账户密码,hostname)

docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone rabbitmq:management
-d 后台运行
-p 隐射端口
–name 指定rabbitMQ名称
RABBITMQ_DEFAULT_USER 指定用户账号
RABBITMQ_DEFAULT_PASS 指定账号密码
执行如上命令后访问:http://ip:15672/

默认账号密码:guest/guest
在这里插入图片描述
在这里插入图片描述
其它常用容器命令:

查看运行中的容器

查看所有的容器用命令docker ps -a

docker ps
启动容器

eg: docker start 9781cb2e64bd

docker start CONTAINERID[容器ID]
stop容器

docker stop CONTAINERID[容器ID]
删除一个容器

docker rm CONTAINERID[容器ID]
查看Docker容器日志

eg:docker logs 9781cb2e64bd

docker logs container‐name[容器名]/container‐id[容器ID]
9、Spring Cloud Bus动态刷新
有了前面的学习,接着进行代码例子实践,config server pom配置:

org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-bus-amqp yaml配置:开放bus-refresh

management:
endpoints:
web:
base-path: /actuator
exposure:
include: info,health,refresh,bus-refresh
endpoint:
health:
show-details: always
refresh:
enabled: true
加上rabbitmq配置

RabbitMQ配置

rabbitmq:
host: 192.168.6.155
port: 5672
username: guest
password: guest
virtual-host: /
Config Client代码例子改造,pom配置:

org.springframework.cloud spring-cloud-starter-bus-amqp 也要加上rabbitMQ配置,这样才能订阅更新:

RabbitMQ配置

rabbitmq:
host: 192.168.6.155
port: 5672
username: guest
password: guest
virtual-host: /
客户端必须修改,refresh、enabled都要改为true,trace是进行跟踪的,可以根据需要开启

spring:
cloud:
bus:
enabled: true
refresh:
enabled: true
trace:
enabled: true
注意点:为了实时更新,必须加上@RefreshScope

配置中心进行bus refresh
深圳网站优化www.zg886.cn

你可能感兴趣的:(SpringCloud系列之分布式配置中心极速入门与实践)