Spring Boot+Spring Cloud基础入门(八)消息总线——Spring Cloud Bus

消息总线


总线是计算机各种功能部件之间传送信息的公共通信干线。消息总线(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 (百度云)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值