天天看点

SpringCloud Bus 消息总线

目录

      • 使用springcloud bus刷新服务配置
        • 集成springcloud bus
        • 手动触发刷新
        • 自动触发配置更新
        • 流程

bus 消息总线,发生指定事件时,可以通过单播或广播通知指定的接口、服务,比如git仓库更新了服务配置,可以通知服务及时刷新配置。

springcloud bus需要搭配消息中间件rabbitmq或kafka使用,使用消息队列存储消息。

对每个config client都进行如下操作,rabbitmq、kafka使用一种即可。

1、添加依赖

<!--不少监控组件中都内置了actuator,如果已有则不必添加-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!--rabbitmq或kafka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
           

2、yml

spring:
  #rabbitmq的配置
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
  #或kafka的配置
  cloud:
    stream:
      kafka:
        binder:
          #有多个时逗号分隔
          brokers: 127.0.0.1:9092

#暴露端点,主要是暴露 /actuator/bus-refresh/ 端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
           

3、在要自动刷新的类上加@RefreshScope

@Controller
@RefreshScope  //加springcloud的注解@RefreshScope
public class TestController {

    @Value("${user.name}")
    private String name;

    @GetMapping("/test")
    @ResponseBody
    public String test(){
        return name;
    }

}
           

打开postman,向任意一个config client节点发送一个post请求,url如下

#config client节点的ip:port。刷新所有config client的配置
http://127.0.0.1:7503/actuator/bus-refresh

#只刷新指定服务(user-server)的所有节点的配置
http://localhost:7503/actuator/bus-refresh/user-server

#只刷使用指定端口(7509)的指定服务(user-server)的配置
http://localhost:7503/actuator/bus-refresh/user-server:7509
           

  • url即postman中的url,注意要使用公网ip,linux的ifconfig、win的ipconfig得到的都是内网ip,可以用 curl cip.cc 查看当前机器的公网ip。
  • 密码是明文传输,尽量使用签名秘钥代替密码,更安全。

  • 手动触发、自动触发都是执行post请求,通知某个config client向mq投递一条消息。
  • 一个config client节点对应mq上的一个队列(注意是节点,不是服务),mq将消息路由到此次将更新配置的config client节点对应的队列中。
  • config client节点消费消息、更新配置文件。

继续阅读