zoukankan      html  css  js  c++  java
  • Spring Cloud-Bus(十二)

    说明

    用于分布式上所有微服务都连接到消息总线上面。进行统一的通知

    Config动态刷新

    configClient

    configClient通过/actuator/bus-refresh端点通知消息总线 消息总线通知线上的所有服务实例 调用/actuator/refresh端点进行配置更新

    configClient改造

    1.增加bus pom依赖

     <!--根据消息总线实现所有服务配置刷新-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>

    2.配置文件增加mq信息

    spring:
      rabbitmq:   #更多mq配置看书331页
        username: liqiang
        password: liqiang
        host: localhost
        port: 5672

    3.配置文件增加bus端点

    management:
      endpoints:
        web:
          exposure:
            include: refresh,bus-refresh

    4.完整配置文件

    spring:
      application:
        name: config #对应{application}
      cloud:
        config:
          profile: dev #映射{profile}
          label: master #映射{label}
          #uri: http://127.0.0.1:7001 #config server地址
          username: liqiang #configserver身份认证用户名
          password: liqiang #configserver身份认证密码
          discovery:
            service-id: CONFIG-SERVER #configserver的服务名
            enabled: true #开启通过服务访问configserver的功能
          fail-fast: true #快速响应spring.cloud.config.fail-fast=true
          retry:
            multiplier: 1.1 #默认间隔乘数  如果间隔是1000  下一次间隔是1100
            max-interval: 2000 #默认最大间隔数(毫秒)
            max-attempts: 6 #默认重试次数
            initial-interval: 1000 #默认间隔数
      rabbitmq:   #更多mq配置看书331页
        username: liqiang
        password: liqiang
        host: localhost
        port: 5672
    server:
      port: 7002
    eureka:
      instance:
        hostname: localhost #当前实例的主机名字
      client:
        serviceUrl:
          defaultZone: http://peer1:1111/eureka/, http://peer2:1112/eureka/
    #http://127.0.0.1:7002/actuator/refresh
    management:
      endpoints:
        web:
          exposure:
            include: refresh,bus-refresh

    5.复制2个配置文件 分别命名为peer1和peer2并且将端口改为不一致

    6.将client instail打包

    8.执行eurekaserver    config-server    通过命令启动2个client

    java -jar /Users/liqiang/Desktop/java开发环境/mavenRegitstory/com/liqiang/spring-cloud-config-client/0.0.1-SNAPSHOT/spring-cloud-config-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
    java -jar /Users/liqiang/Desktop/java开发环境/mavenRegitstory/com/liqiang/spring-cloud-config-client/0.0.1-SNAPSHOT/spring-cloud-config-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

    9.测试

    post请求http://127.0.0.1:7003/actuator/bus-refresh 测试没通过 只有7003实现了刷新

    PS:最终测试时版本文本 不确定是版本差异还是bug 修改版本 重新测试

       <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <!--<version>2.1.0.RELEASE</version>-->
            <version>2.0.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <!--<spring-cloud.version>Greenwich.M3</spring-cloud.version>-->
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
        </properties>

    10.修改git 77777为88888

    posman访问http://localhost:7002/actuator/bus-refresh

    可以看到总线上的7003服务 也刷新了

    configServer

    我们可以发现 通知总线上所有实例刷新配置由configServer来负责会更合理

    1.configServer增加pom依赖

     <!--根据消息总线实现所有服务配置刷新-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>

    2.配置文件增加mq以及端点

    spring:
      rabbitmq:   #更多mq配置看书331页
        username: liqiang
        password: liqiang
        host: localhost
        port: 5672
    management:
      endpoints:
        web:
          exposure:
            include: health,info,bus-refresh

    3.刷新配置改为访问server的/actuator/bus-refresh 就可以了

    指定服务刷新

    http://localhost:7001/actuator/bus-refresh?destination=CONFIG:7002  为服务名字为config同时端口为7002的刷新

    ps:没测试通过应该改为

    http://localhost:7001/actuator/bus-refresh/config:7002 刷新名为config 同时端口为7002的服务

    http://localhost:7001/actuator/bus-refresh/config:** 为刷新名为config的所有服务

    事件跟踪

    1.设置spring.cloud.bus.trace.enabled=true

    2开启端点httptrace

    management:
      endpoints:
        web:
          exposure:
            include: health,info,bus-refresh,httptrace,trace

    3.访问http://localhost:7001/actuator/bus-refresh

    4.再访问http://127.0.0.1:7001/actuator/httptrace

    5.跟老版本的/trace地址不一样输出内容也不一样感觉不利于分析

    {
        "traces": [{
            "timestamp": "2019-01-23T00:51:47.346Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "POST",
                "uri": "http://localhost:7001/actuator/bus-refresh",
                "headers": {
                    "content-type": ["application/json"],
                    "cache-control": ["no-cache"],
                    "postman-token": ["bfe920e9-66fb-42bf-b36f-13d577b9fab7"],
                    "user-agent": ["PostmanRuntime/7.4.0"],
                    "accept": ["*/*"],
                    "host": ["localhost:7001"],
                    "accept-encoding": ["gzip, deflate"],
                    "content-length": ["0"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 204,
                "headers": {}
            },
            "timeTaken": 3296
        }, {
            "timestamp": "2019-01-23T00:51:49.725Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://localhost:7001/config/dev/master",
                "headers": {
                    "accept": ["application/xml, text/xml, application/json, application/*+xml, application/*+json"],
                    "user-agent": ["Java/1.8.0_181"],
                    "host": ["localhost:7001"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/xml;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:51:49 GMT"]
                }
            },
            "timeTaken": 58
        }, {
            "timestamp": "2019-01-23T00:51:49.621Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://localhost:7001/config/dev/master",
                "headers": {
                    "accept": ["application/xml, text/xml, application/json, application/*+xml, application/*+json"],
                    "user-agent": ["Java/1.8.0_181"],
                    "host": ["localhost:7001"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/xml;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:51:49 GMT"]
                }
            },
            "timeTaken": 104
        }, {
            "timestamp": "2019-01-23T00:49:59.062Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "POST",
                "uri": "http://localhost:7001/actuator/bus-refresh",
                "headers": {
                    "content-type": ["application/json"],
                    "cache-control": ["no-cache"],
                    "postman-token": ["470bc387-8f9b-4ddd-8655-66de72970a84"],
                    "user-agent": ["PostmanRuntime/7.4.0"],
                    "accept": ["*/*"],
                    "host": ["localhost:7001"],
                    "accept-encoding": ["gzip, deflate"],
                    "content-length": ["0"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 204,
                "headers": {}
            },
            "timeTaken": 3517
        }, {
            "timestamp": "2019-01-23T00:50:02.173Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://127.0.0.1:7001/actuator/httptrace",
                "headers": {
                    "host": ["127.0.0.1:7001"],
                    "connection": ["keep-alive"],
                    "cache-control": ["max-age=0"],
                    "upgrade-insecure-requests": ["1"],
                    "user-agent": ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.116"],
                    "accept": ["text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"],
                    "accept-encoding": ["gzip, deflate, br"],
                    "accept-language": ["zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"],
                    "cookie": ["JSESSIONID=6369DFBED3CE1C799C4FC36E246CE502; CURRENT_COOKIE=84822DAAAAE4F96E04CBDE51132D0CCE"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:50:01 GMT"]
                }
            },
            "timeTaken": 4
        }, {
            "timestamp": "2019-01-23T00:50:01.319Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://localhost:7001/config/dev/master",
                "headers": {
                    "accept": ["application/xml, text/xml, application/json, application/*+xml, application/*+json"],
                    "user-agent": ["Java/1.8.0_181"],
                    "host": ["localhost:7001"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/xml;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:50:01 GMT"]
                }
            },
            "timeTaken": 39
        }, {
            "timestamp": "2019-01-23T00:50:01.125Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://localhost:7001/config/dev/master",
                "headers": {
                    "accept": ["application/xml, text/xml, application/json, application/*+xml, application/*+json"],
                    "user-agent": ["Java/1.8.0_181"],
                    "host": ["localhost:7001"],
                    "connection": ["keep-alive"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/xml;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:50:01 GMT"]
                }
            },
            "timeTaken": 86
        }, {
            "timestamp": "2019-01-23T00:49:53.411Z",
            "principal": null,
            "session": null,
            "request": {
                "method": "GET",
                "uri": "http://127.0.0.1:7001/actuator/httptrace",
                "headers": {
                    "host": ["127.0.0.1:7001"],
                    "connection": ["keep-alive"],
                    "cache-control": ["max-age=0"],
                    "upgrade-insecure-requests": ["1"],
                    "user-agent": ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.116"],
                    "accept": ["text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"],
                    "accept-encoding": ["gzip, deflate, br"],
                    "accept-language": ["zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"],
                    "cookie": ["JSESSIONID=6369DFBED3CE1C799C4FC36E246CE502; CURRENT_COOKIE=84822DAAAAE4F96E04CBDE51132D0CCE"]
                },
                "remoteAddress": null
            },
            "response": {
                "status": 200,
                "headers": {
                    "Content-Type": ["application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"],
                    "Transfer-Encoding": ["chunked"],
                    "Date": ["Wed, 23 Jan 2019 00:49:53 GMT"]
                }
            },
            "timeTaken": 52
        }]
    }

    源码分析

    事件跟踪跟书上不一样 所以暂时止步

  • 相关阅读:
    BootstrapValidator验证规则、BootStrap表格:列参数
    使用JSONObject解析和生成json
    java.Math类常用方法
    Java内存溢出处理
    windows下Ubuntu虚拟机联网配置 + Ubuntu虚拟机代理配置
    C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案
    C++ 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案
    asp.net 程序,当发生找不到文件的错误时,如何正确定位是哪个文件?
    MVC 网站部署常见问题汇总
    ASP.NET windows验证IIS配置
  • 原文地址:https://www.cnblogs.com/LQBlog/p/10302199.html
Copyright © 2011-2022 走看看