什么是Spring Cloud Bus?
Spring Cloud Bus集成了市面上常用的消息代理(rabbitmq、kafka),连接微服务系统中的所有节点,当数据变更时,可以通过消息代理广播通知微服务及时变更数据;例如微服务的配置更新。
bus解决了什么问题?
解决了微服务数据变更,及时同步的问题。
服务端刷新,直接告诉rabbitmq
从这张图中我们可以看见我们直接刷新服务端,然后服务端发给rabbitmq,然后rabbitmq发给各个服务,这样就起到了都刷新的效果。
客户端刷新
从这张图可以看出,刷新客户端过后,我们不仅向服务端发送了消息,而且还向rabbitmq发送了消息,然后rabbitmq又向各个服务发送了消息,这样就起到了都刷新的效果。
客户端刷新
在我的这篇文章中单个项目刷新介绍的是刷新某一个项目,并不能全部刷新,所以我将创建一个2个通过集群的方式来演示,并且都是在这个项目上修改,服务端不用修改,客户端需要修改,修改的地方就只有2个,一个是加入bus和rabbitmq的依赖,另外一个地方是在配置文件中配置rabbitmq的连接。
首先你要开启rabbitmq
pom中的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
配置文件中的代码:
spring.application.name=config-client
server.port=9031
eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/
eureka.instance.perferIpAddress=true
#默认false,这里设置true,表示开启读取配置中心的配置
spring.cloud.config.discovery.enabled=true
#对应eureka中的配置中心serviceId,默认是configserver
spring.cloud.config.discovery.serviceId=config-server
#指定环境
spring.cloud.config.profile=dev
#git标签
spring.cloud.config.label=master
#springboot 默认开启了权限拦截 会导致 /refresh出现401,拒绝访问
management.security.enabled=false
spring.rabbitmq.host=自己配置
spring.rabbitmq.port=5672
spring.rabbitmq.username=自己配置
spring.rabbitmq.password=自己配置
spring.rabbitmq.virtualHost=/
就只是在上篇文章中加入了最后rabbitmq的配置。
然后再复制一份,修改一下端口就成了集群的环境(有点low但是可以测试0.0)
启动服务端和客户端。
之前:
修改为8.0
post请求:
刷新页面:
说明只刷新一个客户端服务其他客户端都刷新了。
服务端自动刷新
服务端自动刷新和上面差不多,都是在我的这篇博客单个客户端项目刷新项目中修改一下pom文件和配置文件。依然是2个客户端,我们上面修改过后,就不需要修改了,只需要复制服务端的项目修改就可以了。
pom文件中的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
配置文件中的代码:
spring.application.name=config-server
server.port=9030
eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/
eureka.instance.perferIpAddress=true
#spring.cloud.config.server.git.uri=https://gitee.com/agan_jiagou/config
spring.cloud.config.server.git.uri=https://gitee.com/Xinyangyunyang/config
[email protected]
spring.cloud.config.server.git.password=wen1314520++
#springboot 默认开启了权限拦截 会导致 /refresh出现401,拒绝访问
management.security.enabled=false
spring.rabbitmq.host=192.168.23.131
spring.rabbitmq.port=5672
spring.rabbitmq.username=agan
spring.rabbitmq.password=123456
spring.rabbitmq.virtualHost=/
然后启动服务端和客户端项目,
之前:
修改为9.0
然后post请求服务端:
测试结果:
说明服务端刷新过后,客户端都自动刷新了。
指定刷新,局部刷新
之前:
修改为9.0,post请求9031:
结果:
只有9031端口刷新了。
局部刷新,刷新同一名称服务
之前:
修改为10.0
post请求config-client所有的服务,这样名称为config-client的服务都会刷新。
结果:
config-client服务刷新成功。
如果有需要demo或者交流的朋友可以加我的qq997355706。