学习Spring Cloud 技术第八篇-服务总线

209 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

相关阅读

  1. 带你学习Spring Cloud 技术第一篇-总览
  2. 带你学习Spring Cloud 技术第二篇-技术介绍
  3. 带你学习Spring Cloud 技术第三篇-服务注册中心
  4. 学习Spring Cloud 技术第四篇-服务调用
  5. 学习Spring Cloud 技术第五篇-服务降级
  6. 学习Spring Cloud 技术第六篇-服务网关
  7. 学习Spring Cloud 技术第七篇-服务配置

一、服务总线(消息总线)

在微服务架构系统中,我们通常会使用轻量级的消息代理来构建一个公用的消息主题让系统中所有的微服务的实例都连接上来,由于该主题产生的消息会被所有的实例监听和消费,所以我们称他们为消息总线。在总线上的各个实例都可以方便的广播一些需要让其他的链接该主题的实例都知道,例如配置信息变更或者其他一些管理操作等。由于消息总线在微服务的架构系统中被广泛的使用,所以他同配置中心一样,几乎是微服务架构中的必备的组件

Spring Cloud Bus 用轻量级消息代理连接分布式系统的节点。然后可以使用此代理广播状态更改(如配置更改)或其他管理指令。一个关键的想法是,总线就像一个扩展的Spring引导应用程序的分布式执行器。不过,它也可以用作应用程序之间的通信通道。该项目为AMQP代理Kafka提供启动器作为运输工具。

二、代码实操

修改 spring-cloud-config-config3344 配置中心的代码如下:

pom.xml 增加如下的坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

application.yml

server:
  port: 3344
spring:
  application:
    name: cloud-config-center # 注册进eureka的服务的名字
  cloud:
    config:
      label: master # 分支的名称
      server:
        git:
          uri: https://github.com/zhaoligang594/spring-cloud-config.git
          search-paths:
            - spring-cloud-config # 搜索的文件夹
  # 配置rabbit mq
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
# 服务的注册地址
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:7001/eureka/
# 配置消息总线的配置相关的配置
management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

spring-cloud-config-client-3355

pom.xml

<!--  添加消息总线的支持   -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

boostrap.yml

server:
  port: 3355
spring:
  application:
    name: cloud-config-client
  cloud:
  	# 配置中心地址以及相关信息
    config:
      label: master  # label
      name: config   # name
      profile: dev   # 哪一个
      uri: http://config:3344 # 合在一起:http://config:3344/master/config-dev.yml
  # 消息中间件的配置
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
# eureka的服务注册地址
eureka:
  client:
    service-url:
      defaultZone: http://peer1:7001/eureka/
# 下面属于动态刷新的部分
management:
  endpoints:
    web:
      exposure:
        include: "*"
# 之后配合 @RefreshScope
#用 curl -X POST "http://localhost:3355/actuator/refresh" 手动进行刷新

最后新增 spring-cloud-config-client-3366 模块,采用同样的方法创建spring-cloud-config-client-3366。

三、启动测试

3.1 启动顺序

eureka服务注册中心----剩余的几个微服务提供者

image.png

3.2 测试消息总线

在本文中,消息总线的用途在于通知所有的服务进行更新自己的属性。

首先访问2个客户端

image.png

curl http://localhost:3366/getConfigInfo
curl http://localhost:3355/getConfigInfo

通过上面的访问表明,已经成功的将配置的信息从配置中心拿到了本地,而且正常的返回给我们。

修改我们的配置

image.png

保存提交、再次进行测试

image.png

直接访问,发现,配置的属性事没有发生变化的。

通知所有服务自动更新配置

curl -X POST "http://localhost:3344/actuator/bus-refresh"

查看日志变化

image.png

image.png

image.png

修改了配置信息更新成功!

四、定向的更新服务的配置信息

定向更新的目的是,指定某一个实例生效而不是全部实例都修改了配置。

公式:curl -X POST "http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}"

{destination}==spring.application.name:{spring.application.name}:{server.port}

/bus/refresh发送到具体的实例上

测试仅仅更新3355

curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355"

image.png

执行:

curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355"

image.png

根据结果,我们可以知道,我们想要达到的更新效果达到了。

image.png

代码小结:github.com/zhaoligang5…

五、相关阅读

  1. 带你学习Spring Cloud 技术第一篇-总览
  2. 带你学习Spring Cloud 技术第二篇-技术介绍
  3. 带你学习Spring Cloud 技术第三篇-服务注册中心
  4. 学习Spring Cloud 技术第四篇-服务调用
  5. 学习Spring Cloud 技术第五篇-服务降级
  6. 学习Spring Cloud 技术第六篇-服务网关
  7. 学习Spring Cloud 技术第七篇-服务配置

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情