• Bus 消息总线


    代码:https://gitee.com/GXQ205153964/config-parent_bus.git 

    简介: 

    • spring cloud bus 使用轻量级的消息中间件将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。关键的思想就是,消息总线可以为微服务做监控,也可以实现应用程序之间相互通信。
    • spring cloud Bus 可选的消息组件包括 RabbitMQ和Kafka
    • 经常和config一起使用,通过cmd curl发送完post请求后,只能一个客户端刷新得到最新配置文件,如果客户端多时,就很麻烦,bus可以解决这个问题,只需要发送一跳post请求,所有客户端都能通过刷新得到最新外部配置文件。 

    这里是承接Config 分布式配置中心文章,解决文章中遗留的发一次请求只能一个client更新的到最新的配置文件。

    bus搭建

    将config-consumer改造为client

    config-provider的bootstrap.yml复制到config-consumer

    1. #bootstrap优先级更高
    2. #配置config-server地址
    3. #配置获取配置文件的名称等信息
    4. spring:
    5. cloud:
    6. config:
    7. #配置config-server地址
    8. #uri: http://localhost:9527
    9. name: config #文件名
    10. profile: dev #开发环境
    11. label: master #分支
    12. #从注册中心去寻找config-server地址
    13. discovery:
    14. enabled: true
    15. service-id: CONFIG-SERVER
    16. #暴露端点
    17. management:
    18. endpoints:
    19. web:
    20. exposure:
    21. include: refresh # 或者 * 也可以代替,表示全部暴露不安全

    OrderController注入

    将获取到的外部配置文件输出到web

    1. @RefreshScope
    2. @Value("${gao}")
    3. private String gao;
    4. goods.setTitle(goods.getTitle()+"--"+gao);

    导入pom.xml

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-openfeignartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.springframework.cloudgroupId>
    7. <artifactId>spring-cloud-starter-configartifactId>
    8. dependency>

    运行:

    编写bus

    config-server

    引入pom.xml

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-bus-amqpartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-actuatorartifactId>
    8. dependency>

    添加配置

    1. server:
    2. port: 9527
    3. spring:
    4. application:
    5. name: config-server
    6. cloud:
    7. config:
    8. server:
    9. git:
    10. uri: https://gitee.com/GXQ205153964/springcloud-configs.git #远程仓库的地址
    11. label: master
    12. #配置rabbitmq信息
    13. rabbitmq:
    14. host: localhost
    15. port: 5672
    16. username: guest
    17. password: guest
    18. virtral-host: /
    19. eureka:
    20. client:
    21. service-url:
    22. defaultZone: http://localhost:8761/eureka # 注册
    23. #暴露bus的刷新点
    24. management:
    25. endpoints:
    26. web:
    27. exposure:
    28. include: 'bus-refresh'

    config-provider

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-bus-amqpartifactId>
    4. dependency>

    bootstrap.yml

    1. #bootstrap优先级更高
    2. #配置config-server地址
    3. #配置获取配置文件的名称等信息
    4. spring:
    5. cloud:
    6. config:
    7. #配置config-server地址
    8. #uri: http://localhost:9527
    9. name: config #文件名
    10. profile: dev #开发环境
    11. label: master #分支
    12. #从注册中心去寻找config-server地址
    13. discovery:
    14. enabled: true
    15. service-id: CONFIG-SERVER
    16. #配置rabbitmq信息
    17. rabbitmq:
    18. host: localhost
    19. port: 5672
    20. username: guest
    21. password: guest
    22. virtral-host: /
    23. #暴露端点
    24. management:
    25. endpoints:
    26. web:
    27. exposure:
    28. include: refresh # 或者 * 也可以代替,表示全部暴露不安全

    config-consumer

    pom.xml

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-bus-amqpartifactId>
    4. dependency>

    bootstrap.yml

    1. #bootstrap优先级更高
    2. #配置config-server地址
    3. #配置获取配置文件的名称等信息
    4. spring:
    5. cloud:
    6. config:
    7. #配置config-server地址
    8. #uri: http://localhost:9527
    9. name: config #文件名
    10. profile: dev #开发环境
    11. label: master #分支
    12. #从注册中心去寻找config-server地址
    13. discovery:
    14. enabled: true
    15. service-id: CONFIG-SERVER
    16. #配置rabbitmq信息
    17. rabbitmq:
    18. host: localhost
    19. port: 5672
    20. username: guest
    21. password: guest
    22. virtual-host: /
    23. #暴露端点
    24. management:
    25. endpoints:
    26. web:
    27. exposure:
    28. include: refresh # 或者 * 也可以代替,表示全部暴露不安全

    application.xml

    1. server:
    2. port: 9000
    3. eureka:
    4. instance:
    5. hostname: localhost
    6. client:
    7. service-url:
    8. defaultZone: http://localhost:8761/eureka # 注册
    9. spring:
    10. application:
    11. name: config-consumer #设置当前应用的名称。将来会在eureka中application显示,将来需要使用该名称来获取路径
    12. # 开启feign对hystrix的支持
    13. feign:
    14. hystrix:
    15. enabled: true

    结果:

     发送后 client端  consumer和provider通过刷新就能获取到最新的外部配置文件

  • 相关阅读:
    基于SpringBoot的时间管理系统
    图像运算和图像增强三
    PLM是什么?为什么要上PLM?有什么好处?
    java 实现访问者模式
    兑换码设计
    HTTP请求:GET/POST请求
    vue-cli 3中dart-sass替换node-sass,element ui icon图标乱码问题
    Qt编写物联网管理平台49-设备模拟工具
    人肠道宏病毒与其宿主和环境因素的关联分析
    Object.setPrototypeOf() 和 Object.create() 区别
  • 原文地址:https://blog.csdn.net/qq_51497041/article/details/126220676