Spring Cloud Bus消息总线+rabbitmq+Gradle(Greenwich.RELEASE版本)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Spring Cloud Bus消息总线+rabbitmq+Gradle(Greenwich.RELEASE版本)

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!

准备工作

环境以及版本:
  • SpringBoot 2.1.3.RELEASE
  • SpringCloud Greenwich.RELEASE
  • Jdk 1.8
  • Gradle 5.2.1+
  • 说明

    以下改造均在子项目进行操作,父项目的github地址,下述需下载父项目用来管理公共依赖: 

    https://github.com/cuifuan/springcloud-tools

    1.改造你的 config-server

    1.1 构建配置文件 build.gradle
    
    dependencies {
        implementation "org.springframework.cloud:spring-cloud-config-server"
        implementation "org.springframework.cloud:spring-cloud-bus"
        implementation "org.springframework.cloud:spring-cloud-starter-bus-amqp"
    }
    
    1.2 配置文件 application.yml
    
    server:
      port: 7001
    spring:
      application:
        name: config-server
      cloud:
        config:
          server:
            git:
              uri: git地址 #例如https://github.com/cuifuan/springcloud-configuration.git
              search-paths: 仓库文件下文件夹
              default-label: master
              username: git账号
              password: git密码
        bus:
          trace:
            enabled: true
      rabbitmq:
        host: rabbitmq地址
        port: 5672
        username: rabbit账号【默认:guest】
        password: rabbit密码【默认:guest】
        virtual-host: /
    eureka:
    # 修改在服务中心的地址status为 ip+端口 【例如:10.0.0.100:88】
      instance:
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
      client:
        serviceUrl:
          defaultZone: http://springcloud-tools:8761/eureka/
    info:
      app:
        description: This is Spring Cloud remote Registration center.
        name: tools-config-server
        version: 0.0
    management:
      endpoint:
        bus-refresh:
          enabled: true
      endpoints:
        web:
          exposure:
            include: refresh,bus-refresh
    
    1.3 启动类 ToolsConfigServerAppliaction.java
    
    package store.zabbix.config;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.cloud.client.SpringCloudApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @EnableConfigServer
    @SpringCloudApplication
    @RestController
    public class ToolsConfigServerAppliaction {
    
        public static void main(String[] args) {
            SpringApplication.run(ToolsConfigServerAppliaction.class, args);
        }
    
        @RequestMapping("/")
        public String home() {
            return "Hello World! My name is configserver.";
        }
    
    }
    

    2. 改造你的 config-client (客户端)

    用来读取配置文件的

    2.1 构建配置文件 build.gradle
    
    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-config'
        implementation "org.springframework.cloud:spring-cloud-bus"
        implementation "org.springframework.cloud:spring-cloud-starter-bus-amqp"
    }
    
    2.2 配置文件 bootstrap.yml
    
    spring:
      cloud:
        config:
          name: tools-config-client     #对应{application}部分
          profile: dev                  #对应{profile}部分
          #uri: http://localhost:8888/  #配置中心的具体地址
          label: master                 #对应git的分支。如果配置中心使用的是本地存储,则该参数无用
          discovery:
            enabled: true                 #开启Config服务发现支持
            service-id: config-server   #指定配置中心的service-id,便于扩展为高可用配置集群。
    eureka:
      instance:
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
      client:
        service-url:
          defaultZone: http://springcloud-tools:8761/eureka/
    
    2.2 配置文件 application.yml
    
    server:
      port: 7003
    spring:
      application:
        name: tools-config-client
      cloud:
        config:
      #配置重试机制
          retry:
            initial-interval: 2000
            max-attempts: 2000
            max-interval: 2000
            multiplier: 1.2
          fail-fast: true
        bus:
          #动态刷新配置
          refresh:
            enabled: true
          #跟踪总线事件
          trace:
            enabled: true
      rabbitmq:
        host: rabbitmq地址
        port: 5672
        username: rabbit账号【默认:guest】
        password: rabbit密码【默认:guest】
    #配置actuator
    # 1.X版本的springboot 配置: management.security.enabled=false  已经作废
    #关闭安全认证
    management:
      endpoint:
        bus-refresh:
          enabled: true
      #refresh接入点显式暴露出来
      endpoints:
        web:
          exposure:
            include: refresh,bus-refresh
    
    2.3 启动类 ConfigClientApplication.java

    注意:一定不要忘了加 @RefreshScop注解

    
    package store.zabbix.configreader;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    @RefreshScope
    @EnableDiscoveryClient
    public class ConfigClientApplication {
    
        /**     * http://localhost:8881/actuator/bus-refresh     */
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.class, args);
        }
    
        @Value("${message}")
        String message;
    
        @GetMapping("/hello")
        public String getMessage(){
            return message;
        }
    
    }
    

    3.远程配置文件

    4.操作流程

  • 启动config-server
  • 启动config-client
  • 访问`http://127.0.0.1:7003/hello`
  • 之后更改远程仓库配置文件,提交
  • 访问`http://127.0.0.1:7003/hello`发现无变化
  • 用postman做post请求`http://10.0.0.82:7001/actuator/bus-refresh`或者用 `curl -X POST http://10.0.0.82:7001/actuator/bus-refresh`
  • 再次访问http://127.0.0.1:7003/hello
  • 这个时候的读取的配置文件已发生变化

    5.需要注意的坑

  • 请确定你的rabbitmq是通的,guest账户无法通过远程ip访问
  • 注意上面的ip地址,我是这边测试使用,请更改成个人正确或者本地
  • springboot2.x之后bus刷新地址更改为 `/actuator/bus-refresh`
  • springboot和springcloud版本要一致,其他版本没试过
  • 加入Java知音技术交流,戳这里:

    更多Java技术文章,尽在【Java知音】网站。

    网址:www.javazhiyin.com  ,搜索Java知音可达!

    看完本文有收获?请转发分享给更多人

    Spring Cloud Bus消息总线+rabbitmq+Gradle(Greenwich.RELEASE版本)

    原文始发于微信公众号(Java知音):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Spring Cloud Bus消息总线+rabbitmq+Gradle(Greenwich.RELEASE版本)


     上一篇
    SpringCloud-sleuth-zipkin链路追踪 SpringCloud-sleuth-zipkin链路追踪
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 本文系投稿,作者:小毛毛www.cnblogs.com/zgwjava www.cnblogs.com/zgwjava 什么是Zipkin?它是一个分布式链路跟踪系统
    下一篇 
    微服务架构之「 监控系统 」 微服务架构之「 监控系统 」
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:奎哥 来自公众号:不止思考 来自公众号:不止思考 推荐阅****读 1.  ****2. **** 3.  ****4. **** 在微服务架构的系