天天看点

springcloud———消息总线bus

什么是Spring Cloud Bus?

Spring Cloud Bus集成了市面上常用的消息代理(rabbitmq、kafka),连接微服务系统中的所有节点,当数据变更时,可以通过消息代理广播通知微服务及时变更数据;例如微服务的配置更新。

bus解决了什么问题?

解决了微服务数据变更,及时同步的问题。

服务端刷新,直接告诉rabbitmq

springcloud———消息总线bus

从这张图中我们可以看见我们直接刷新服务端,然后服务端发给rabbitmq,然后rabbitmq发给各个服务,这样就起到了都刷新的效果。

客户端刷新

springcloud———消息总线bus

从这张图可以看出,刷新客户端过后,我们不仅向服务端发送了消息,而且还向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)

启动服务端和客户端。

之前:

springcloud———消息总线bus

修改为8.0

post请求:

springcloud———消息总线bus

刷新页面:

springcloud———消息总线bus
springcloud———消息总线bus

说明只刷新一个客户端服务其他客户端都刷新了。

服务端自动刷新

服务端自动刷新和上面差不多,都是在我的这篇博客单个客户端项目刷新项目中修改一下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=/
           

然后启动服务端和客户端项目,

之前:

springcloud———消息总线bus

修改为9.0

然后post请求服务端:

springcloud———消息总线bus

测试结果:

springcloud———消息总线bus
springcloud———消息总线bus

说明服务端刷新过后,客户端都自动刷新了。

指定刷新,局部刷新

之前:

springcloud———消息总线bus

修改为9.0,post请求9031:

springcloud———消息总线bus

结果:

springcloud———消息总线bus
springcloud———消息总线bus

只有9031端口刷新了。

局部刷新,刷新同一名称服务

之前:

springcloud———消息总线bus

修改为10.0

springcloud———消息总线bus

post请求config-client所有的服务,这样名称为config-client的服务都会刷新。

结果:

springcloud———消息总线bus
springcloud———消息总线bus

config-client服务刷新成功。

如果有需要demo或者交流的朋友可以加我的qq997355706。

继续阅读