Config,Bus, Stream,Sleuth+Zipkin详解

Posted 一只猪的思考

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Config,Bus, Stream,Sleuth+Zipkin详解相关的知识,希望对你有一定的参考价值。

一、Config 分布式配置中心

1.概述

  • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护。
  • 好处:
    • 集中管理配置文件
    • 不同环境不同配置,动态化的配置更新
    • 配置信息改变时,不需要重启即可更新配置信息到服务

2.config快速入门

config server:

  1. 使用gitee创建远程仓库,上传配置文件

  2. 搭建 config server 模块
    application.yml配置

    启动类配置

  3. 导入 config-server 依赖

<dependencies>

        <!-- config-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>
  1. 编写配置,设置 gitee 远程仓库地址
spring:
  application:
    name: config-server
  # spring cloud config
  cloud:
    config:
      server:
        # git 的 远程仓库地址
        git:
          uri: XXX
      label: master # 分支配置
  1. 测试访问远程配置文件

config client:

  1. 导入 starter-config 依赖
  <dependencies>

        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


        <!-- eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!--config client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

    </dependencies>

  1. 配置config server 地址,读取配置文件名称等信息

  2. 获取配置值

    可以直接通过键值对的形式取出config里面的值

  3. 启动测试

Config 客户端刷新

  • 在 config 客户端引入 actuator 依赖
<dependencies>

        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


        <!-- eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

    </dependencies>
  • 获取配置信息类上,添加 @RefreshScope 注解

  • 添加配置
    management.endpoints.web.exposure.include: refresh

  • 使用curl工具发送post请求
    curl -X POST http://localhost:8001/actuator/refresh

Config 集成 Eureka

二、Bus 消息总线

1.bus概述

  • Spring Cloud Bus 是用轻量的消息中间件将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。关键的思想就是,消息总线可以为微服务做监控,也可以实现应用程序之间相通信。
  • Spring Cloud Bus 可选的消息中间件包括 RabbitMQ 和 Kafka 。

2.bus的快速入门

  • 分别在 config-server 和 config-client中引入 bus依赖:bus-amqp
<!-- bus -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
  • 分别在 config-server 和 config-client中配置 RabbitMQ
    config-server
spring:
  application:
    name: config-server
  # spring cloud config
  cloud:
    config:
      server:
        # git 的 远程仓库地址
        git:
          uri: https://gitee.com/itheima_cch/itheima-configs.git
      label: master # 分支配置
  #配置rabbitmq信息
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    virtual-host: /

provider

# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
  cloud:
    config:
      # 配置config-server地址
      # uri: http://localhost:9527
      # 配置获得配置文件的名称等信息
      name: config # 文件名
      profile: dev # profile指定,  config-dev.yml
      label: master # 分支
      # 从注册中心去寻找config-server地址
      discovery:
        enabled: true
        service-id: CONFIG-SERVER
  #配置rabbitmq信息
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    virtual-host: /

management:
  endpoints:
    web:
      exposure:
        include: '*'

  • 在config-server中设置暴露监控断点:bus-refresh

  • 启动测试

三、Stream 消息驱动

1.Stream概述

  • Spring Cloud Stream 是一个构建消息驱动微服务应用的框架。
  • Stream 解决了开发人员无感知的使用消息中间件的问题,因为Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件,使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。
  • Spring Cloud Stream目前支持两种消息中间件RabbitMQ和Kafka

2.Stream组件

  • Spring Cloud Stream 构建的应用程序与消息中间件之间是通过绑定器 Binder 相关联的。绑定器对于应用程序而言起到了隔离作用, 它使得不同消息中间件的实现细节对应用程序来说是透明的。

  • binding 是我们通过配置把应用和spring cloud stream 的 binder 绑定在一起

  • output:发送消息 Channel,内置 Source接口

  • input:接收消息 Channel,内置 Sink接口

Stream 消息消费者

  • 创建消息生产者模块,引入依赖 starter-stream-rabbit
    <dependencies>

        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!-- stream -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

    </dependencies>
  • 编写配置,定义 binder,和 bingings
server:
  port: 9000



spring:
  cloud:
    stream:
      # 定义绑定器,绑定到哪个消息中间件上
      binders:
        itheima_binder: # 自定义的绑定器名称
          type: rabbit # 绑定器类型
          environment: # 指定mq的环境
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: guest
                password: guest
                virtual-host: /
      bindings:
        input: # channel名称
          binder: itheima_binder #指定使用哪一个binder
          destination: itheima_exchange # 消息目的地
  • 定义消息发送业务类。添加 @EnableBinding(Source.class),注入MessageChannel output ,完成消息发送

  • 编写启动类,测试

Stream 消息生产者

  • 创建消息消费者模块,引入依赖 starter-stream-rabbit
    <dependencies>

        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!-- stream -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

    </dependencies>

  • 编写配置,定义 binder,和 bingings
server:
  port: 8000



spring:
  cloud:
    stream:
      # 定义绑定器,绑定到哪个消息中间件上
      binders:
        itheima_binder: # 自定义的绑定器名称
          type: rabbit # 绑定器类型
          environment: # 指定mq的环境
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: guest
                password: guest
                virtual-host: /
      bindings:
        output: # channel名称
          binder: itheima_binder #指定使用哪一个binder
          destination: itheima_exchange # 消息目的地






  • 定义消息接收业务类。添加 @EnableBinding(Sink.class),使用@StreamListener(Sink.INPUT),完成消息接收。

  • 编写启动类,测试

四、Sleuth+Zipkin 链路追踪

1.概述

  • Spring Cloud Sleuth 其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程,捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
    • 耗时分析
    • 可视化错误
    • 链路优化
  • Zipkin 是 Twitter 的一个开源项目,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

2.Sleuth+Zipkin 快速入门

安装启动zipkin。 java –jar zipkin.jar

访问zipkin web界面。 http://localhost:9411/

在服务提供方和消费方分别引入 sleuth 和 zipkin 依赖

 <!-- sleuth-zipkin -->
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

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

分别配置服务提供方和消费方。

启动,测试

以上是关于Config,Bus, Stream,Sleuth+Zipkin详解的主要内容,如果未能解决你的问题,请参考以下文章

5.SpringCloud -- 配置中心 Config消息总线 Bus链路追踪 Sleuth配置中心 Nacos

Spring Cloud系列之 ConfigBusStreamSleuth

Spring Cloud系列之 ConfigBusStreamSleuth

SpringCloud第二季之Stream,Sleuth学习笔记

SpringCloud第二季之Stream,Sleuth学习笔记

SpringCloud 消息驱动(Stream) 和 分布式链路跟踪(Sleuth)