本章内容主要使用Spring Cloud Config来启动一个配置中心服务,通过Spring Cloud Bus消息总线(依赖rabbitmq)和Git仓库(Gitee)Webhook钩子函数来实现配置的自动更新(push新的配置到gitee仓库时触发)
惯例先贴官网链接
https://www.rabbitmq.com/install-rpm.html
就是官网这安装教程写的太乱太复杂,看着头疼
我们来个简单粗暴的,少走弯路
# 配置epel,相当于添加了一个第三方源
yum install epel-release -y# 安装rabbit-server 服务端必须的
yum install rabbitmq-server -y# 启动
rabbitmq-plugins enable rabbitmq_management
systemctl start rabbitmq-server# 开机自启
systemctl enable rabbitmq-server
记得还是放通防火墙
rabbitmq默认监听端口5672,rabbitmq的控制台端口15672
浏览器访问 http://ip:1572,ok你的rabbitmq已经起来了
ps:至于为什么我访问的是localserver,配置下/etc/hosts文件,这个不用说吧

惯例应该是配置service让rabbitmq开机自启,方便我们调试。
rabbitmq的service是直接安装好的,我们看下他的配置:
[Unit]
Description=RabbitMQ broker
After=syslog.target network.target[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
WorkingDirectory=/var/lib/rabbitmq
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop[Install]
WantedBy=multi-user.target
想详细了解linux service的查看这篇blog https://blog.51cto.com/u_15077561/4163501
Spring Cloud Config的代码就需要我们手动实现一下了,不过也就是改改配置文件,starter已经帮我们做了所有事情
Spring Cloud Config依赖git仓库进行配置文件管理
申请一个git仓库,这个不用多说,为了国内访问方便直接用gitee https://gitee.com/
然后创建一个仓库,创建一个config目录,创建一个配置文件,比如文件名就叫config-pro.yml
配置随便写一写,如下:
app:version: pro2
server:port: 80
spring:rabbitmq:host: localserverport: 5672username: guestpassword: guestdatasource:url: jdbc:mysql://127.0.0.1/scexample?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=trueusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverjpa:properties:hibernate:hbm2ddl:auto: updatedialect: org.hibernate.dialect.MySQL5InnoDBDialectshow-sql: true
org.springframework.cloud spring-cloud-starter-consul-discovery
org.springframework.cloud spring-cloud-config-server
为了实现配置的自动刷新,还需要引入以下几个依赖
org.springframework.cloud spring-cloud-bus
org.springframework.boot spring-boot-starter-actuator
org.springframework.cloud spring-cloud-stream-binder-rabbit
server:port: 8001 # 配置中心服务监听的端口
spring:application:name: spring-cloud-config-servercloud:config:server:git:uri: https://gitee.com/ideatea/demo-config-repo.git # 用于托管配置的git仓库,确保你的应用能访问search-paths: # 配置文件所在仓库的目录- config- repositories- exampleusername: admin # 仓库用户名password: 1234 # 仓库密码default-label: masterdiscovery:enabled: true # 开启服务发现bus:enabled: true # 开启bus消息总线trace:enabled: true # 开启trace之后,可以追踪所有此节点的RemoteApplicationEvent的各个子事件类型事件# 配置中心的相关配置consul:host: localserverport: 8500discovery:enabled: true # 将服务注册到consulservice-name: config-server
# bus依赖rabbitmq的相关配置,也可以直接使用默认配置rabbitmq:host: localserver # rabbitmq所在服务器,我这里配的hostsport: 5672username: guestpassword: guest
# bus endpoints依赖actuator,暴露bus-refresh端点
management:endpoints:web:exposure:include: bus-refresh
spring-cloud-bus的事件机制,有兴趣看下这个blog https://blog.csdn.net/xichenguan/article/details/77535694
启动注册中心和配置中心,我们就能直接访问获取到配置文件了
如果你想了解访问url和配置文件的对应关系,看看这篇blog https://www.ngui.cc/el/812654.html

上面已经添加了spring-cloud-bus来实现配置刷新,我们还需要在git仓库添加webhook,在推送配置到git仓库时自动触发配置更新

测试配置自动更新
启动注册中心和配置中心,修改配置文件并推动到git仓库
获取配置中心配置,查看配置是否刷新
vim /etc/systemd/system/config-server.service
配置如下
[Unit]
Description=config-server service
After=network.target consul.service rabbitmq-server.service
# 因为配置中心依赖服务中心和rabbitmq,把依赖加上
Requires=consul.service rabbitmq-server.service
Wants=network.target[Service]
Type=simple
# 启动服务的命令
ExecStart=/usr/bin/java -jar /ssd/config-server/config-server-0.0.1-SNAPSHOT.jar >/var/log/demo/config-server/config-server_info.log[Install]
WantedBy=multi-user.target