Springcloud Config使用可以实现配置的动态刷新,防止忘记手动刷新。
是什么?
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架, 它整合了Java的事件处理机制和消息中间件的功能。Bus支持两种代理:RabbitMQ和Kafka。上图是直接推送给一个服务,也可以直接推送给server config这个服务,来实现消息的推送。
什么是总线 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播─些需要让其他连接在该主题上的实例都知道的消息。
基本原理 ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。
Windows安装rabbitMq:
1.安装Erlang,下载地址:http://erlang.org/download/opt_win64_21.3.exe
2.安装RabbitMQ,下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14
3.进入sbin目录,输入管理和启动功能rabbitmq-plugins enable rabbitmq management
4.访问地址查看是否安装成功:http://localhost:15672/,默认的账号和密码是guest
Linux安装rabbitMq:
创建cloud-config-client3366,演示广播效果
pom文件跟cloud-config-client3355一样
application.yaml也跟cloud-config-client3355一样
controller和主启动基本一样
设计思想:
1.利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
2.利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置技术上选择config server进行广播实现,减少业务服务端的繁琐性。
给cloud-config-center-3344配置中心服务端添加消息总线支持
pom添加
<dependency>
? ?<groupId>org.springframework.cloud</groupId>
? ?<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
application.yaml
server:
port: 3344
?
spring:
application:
? name: cloud-config-center
cloud:
? config:
? ? server:
? ? ? git:
? ? ? ? password: 12345678
? ? ? ? username: root
? ? ? ? uri: http://192.168.25.153:1000/root/cloud_config.git
? ? ? ? search-paths:
? ? ? ? ? - cloud_config
# ? ? ? ? private-key:
# ? ? ? ? ? -----BEGIN RSA PRIVATE KEY-----
# ? ? ? ? ? ?
# ? ? ? ? ? -----END RSA PRIVATE KEY-----
? ? label: main ? #分支
?
#rabbitmq配置
rabbitmq:
host: 192.168.25.153
port: 5672
username: admin
password: aaaaaa
?
eureka:
client:
? service-url:
? ? defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
?
#rabbitmq相关配置,暴露bus网新配置的端点
management:
endpoints:
? web:
? ? exposure:
? ? ? include: 'bus-refresh'
给cloud-config-client-3355|3366客户端添加消息总线支持
pom文件
<dependency>
? ?<groupId>org.springframework.cloud</groupId>
? ?<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
applcation.yaml
15672端口,连接时使用5672这个。
测试:
修改之前:
修改之后:(修改并发送Post请求)
访问:
固定服务通知,案例设置只通知3355,不通知3366。
具体实施例子: 公式: http://localhost:3344/actuator/bus-refresh/{destination},/bus/refresh请求不再发送到具体的服务实例上,而是发给config server通过destination参数类指定需要更新配置的服务或实例。
测试:
通知总结All: