一、 搭建配置中心
首先在pom文件中引入配置中心相关的jar包
org.springframework.cloud
spring-cloud-config-server
2.2.0.RELEASE
编写yml文件
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: [email protected]:Leesin-one/springcloud-config.git // ssh链接的方式
search-paths:
- springcloud-config #搜索目录.这个目录指的是github上的目录
label: master #读取分支
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
关于GitHub相关的配置,首先需要创建一个仓库然后,然后在本地gti bash中输入命令
ssh-keygen -m PEM -t rsa -b 4096 -C "[email protected]" // 创建一个公钥
cat /c/Users/lenovo/.ssh/id_rsa.pub // 查看公钥,将公钥的内容放到GitHub的ssh验证上,就可以访问成功
主启动类
@SpringBootApplication
@EnableConfigServer // 开启配置中心
public class ConfigCenter {
public static void main(String[] args) {
SpringApplication.run(ConfigCenter.class, args);
}
}
然后输入下面的地址就可以访问了
localhost:3344/master(代表哪一个分支)/config(应用名)-dev(属性名).yml
二、搭建配置客户端
首先引入客户端相关的配置
org.springframework.cloud
spring-cloud-starter-config
2.2.0.RELEASE
这次我们创建的是bootstrap.yml文件并不是application.yml文件,下面说一下这两个文件的区别:
1. application.yml是用户级的资源配置选项,bootstrap.yml是系统级别的
2. bootstrap.yml比application.yml先加载,优先级更高
yml文件内容
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344 # 去配置服务中心的地方
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
controller:
@RestController
public class ConnfigClient {
// 因为config仓库以rest形式暴露,所以所有客户端都可以通过config服务端访问到github上对应的文件信息
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return "configInfo" + configInfo;
}
}
主启动类:
@SpringBootApplication
@EnableEurekaClient
public class ConfigServer3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigServer3355.class, args);
}
}
这样一个配置客户端就搭建完成但是会出现无法实时更新的情况所以为了避免这种情况的出现需要做如下更改
首先在pom文件中添加监控模块:
org.springframework.boot
spring-boot-starter-actuator
在yml设置端点暴露
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
在controller添加 @RefreshScope 注解,但是这样还是不能进行实时同步,所以还需要向controller发送一个post请求进行刷新才能完成,
这样虽然做到了实时刷新,但是面对数量庞大的机器时不可能这样做所以需要引入消息总线进行消息的发布,消息总线实际上就是一个消息队列,可以进行广播进行设置。
三、 Springcloud-bus 消息总线
1. 服务端
首先需要导入相关的jar包
org.springframework.cloud
spring-cloud-starter-bus-amqp
2.2.1.RELEASE
然后进行rabbitmq相关的文件配置
spring:
rabbitmq:
host: localhost
port: 5672 #rabbit相关配置 15672是web管理界面的端口,5672是MQ访问的端口
username: guest
password: guest
management: #rabbitmq相关设置 ,暴露 bus刷新配置的端点
endpoints:
web:
exposure:
include: 'bus-refresh'
2.消费端
首先也需要导入上面的jar包,也进行如下配置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
management: #暴露监控端点
endpoints:
web:
exposure:
include: "*"
然后在cmd中输入命令进行全局消息的发布
curl -X POST "http://localhost:3344/actuator/bus-refresh"
# 进行局部通知
curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355" 服务名+端口号
这时再访问客户端配置信息就会同步。