概述
消息总线
总线是计算机各种功能部件之间传送信息的公共通信干线。消息总线(Message Queue,MQ),便是消息子各服务之间传输消息的通信干线,是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。
由于我的系统上,暂时只安装了RabbitMQ,所以本项目以RabbitMQ作为演示。实际应用中,ActiveMQ,Kafka等消息队列,都是可以使用的。
修改Config-Client项目
在之前的Config-Client原有的项目基础上,增加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
再修改bootstrap.properties文件,Spring Boot的目的就是为了简化一切配置,所以,将原来的application.properties中的内容,拷贝到bootstrap.properties中,再将application.properties文件删除,在bootstrap.properties中添加rabbitMQ相关配置。下面的配置是针对SpringBoot2.0以上版本的,如果是低版本的,可以不写management.endpoints.web.exposure.include=*
:
server.port=9007
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=user
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=/CMW
spring.rabbitmq.username=cmw
spring.rabbitmq.password=cmw96920123
management.endpoints.web.exposure.include=*
再在带有@Value远程读取的类上面,添加@RefreshScope注释。
@SpringBootApplication
@RestController
@RefreshScope
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Value("${username}")
String username;
@Value("${password}")
String password;
@RequestMapping(value = "/user")
public String user(){
return "您好,您用户名为:"+username+",密码为:"+password;
}
}
致此,Config_Client项目就修改完成了。
修改Config-Server项目
在Config-Server项目的pom.xml文件中,添加eureka-client依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在application.properties文件中,添加eureka的client地址。
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
再在项目启动类上,增加@EnableEurekaClient注解。
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
致此,对项目的修改基本完成。
运行项目
访问Config-Client中配置的页面:http://localhost:9007/user 出现:
您好,您用户名为:ChengMingWei,密码为:SpringCloud
再进入GitHub修改application-user.properties文件,修改完成后。当我们未执行消息刷新命令时,重新加载http://localhost:9007/user时,显示的仍然是尚未更新的配置。
您好,您用户名为:ChengMingWei,密码为:SpringCloud
在浏览器输入刷新配置文件命令http://localhost:9007/actuator/refresh(在低版本中,使用http://localhost:9007/bus/refresh) ,当在浏览器中,访问此链接时,默认的请求方式为GET,请求会出现405的错误,但是此处是需要以POST方式进行请求的,我们可以使用第三方软件,如Postman(链接: 百度网盘下载 密码: yy4s)之类的做模拟请求,也可以在如火狐浏览器之类的浏览器中,下载poster插件,进行POST请求。
以POST方式请求后,浏览器中会出现如下信息,标识修改更新了哪些字段:
[
“config.client.version”,
“password”,
“username”
]
接下来,我们再去刷新http://localhost:9007/user,出现:
您好,您用户名为:CMW,密码为:Hello!SpringCloud
已经是修改后的内容了。原本不用消息总线的方式,是在项目启动时,将所有配置文件读取下来,但当配置文件更新时,项目不会同步更新,只有重新运行项目,才会启动。而使用了消息总线的项目,在执行刷新命令后,会重新读取配置,将同步显示新的配置。
相关工具下载
使用RabbitMQ,还需要下载Erlang。
RabbitMQ : http://www.rabbitmq.com/ (官网)
Erlang:http://www.erlang.org/ (官网)
Postman:https://www.getpostman.com/(官网)
以上文件我都传到百度云了: https://pan.baidu.com/s/1bjcS9bOEzOv2o8GwIAOLbQ 密码: mq9g (百度云)
最后
以上就是美满歌曲为你收集整理的Spring Boot+Spring Cloud基础入门(八)消息总线——Spring Cloud Bus的全部内容,希望文章能够帮你解决Spring Boot+Spring Cloud基础入门(八)消息总线——Spring Cloud Bus所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复