• springcloud -- sleuth+zipkin整合rabbitMQ详解


    为什么使用RabbitMQ?

    我们已经知道,zipkin的原理是服务之间的调用关系会通过HTTP方式上报到zipkin-server端,然后我们再通过zipkin-ui去调用查看追踪服务之间的调用链路。但是这种方式存在一个隐患,如果微服务之间与zipkin服务端网络不通,或调用链路上的网络闪断,http通信收集方式就无法工作。而且zipkin默认是将数据存储在内存中的,如果服务端重启或宕机,就会导致数据丢失。

    所以我们不仅将数据存储在zipkin-serve中,同时还能通过某个消息存储的容器将本次调用其他服务的消息数据进行持久化存储,这样不就可以解决问题吗?结合RabbitMQ证好解决了这一问题,再发一份到消息队列中去。


    安装RabbitMQ

    查找镜像

    1. 进入docker hub镜像仓库地址:https://hub.docker.com/_/rabbitmq?tab=description ,选择带有 "management" 的版本(包含管理界面)

    docker Hub

    1. docker 搜素下载
    docker search rabbitmq:management
    
    

    docker search

    拉取镜像

    docker pull rabbitmq:3.7.7-management // 1
    
    docker pull rabbitmq:management // 2
    

    运行rabbitMQ

    docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
    
    

    此方式默认用户名:guest,密码:guest,手动配置参考:

    -d 后台运行容器;

    --name 指定容器名;

    -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);

    -v 映射目录或文件;

    --hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);

    -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

    查看正在运行的容器

    docker container ps
    

    访问rabbitMQ WEB管理界面

    访问地址 http://192.168.2.28:15672/#/queues,这时候应该是啥也没有的
    无消息订阅

    zipkin-server

    上一篇文章用的是docker快速启动,这篇文章用jar包启动模式,因为配置方便,不用写docker-compose.yml 环境配置文件

    java -jar zipkin-server-2.17.0-exec.jar --zipkin.collector.rabbitmq.addresses=localhost
    

    后面的--zipkin.collector.rabbitmq.addresses=localhost 就是RabbitMQ的配置,这是默认的

    如果要自己指定的用户名和密码可以参考下面的启动命令:

    java -jar zipkin-server-2.17.0-exec.jar --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest
    
    • 可配置的环境变量参考表
    属性 环境变量 描述
    zipkin.collector.rabbitmq.concurrency RABBIT_CONCURRENCY 并发消费者数量,默认为 1
    zipkin.collector.rabbitmq.connection-timeout RABBIT_CONNECTION_TIMEOUT 建立连接时的超时时间,默认为 60000 毫秒,即 1 分钟
    zipkin.collector.rabbitmq.queue RABBIT_QUEUE 从中获取 span 信息的队列,默认为 zipkin
    zipkin.collector.rabbitmq.uri RABBIT_URI 符合 RabbitMQ URI 规范 的 URI,例如 amqp://user:pass@host:10000/vhost

    如果设置了URL,则以下属性将被忽略

    属性 环境变量 描述
    zipkin.collector.rabbitmq.addresses RABBIT_ADDRESSES 用逗号分隔的 RabbitMQ 地址列表,例如 localhost:5672,localhost:5673
    zipkin.collector.rabbitmq.password RABBIT_PASSWORD 连接到 RabbitMQ 时使用的密码,默认为 guest
    zipkin.collector.rabbitmq.username RABBIT_USER 连接到 RabbitMQ 时使用的用户名,默认为 guest
    zipkin.collector.rabbitmq.virtual-host RABBIT_VIRTUAL_HOST 使用的 RabbitMQ virtual host,默认为 /
    zipkin.collector.rabbitmq.use-ssl RABBIT_USE_SSL 设置为 true 则用 SSL 的方式与 RabbitMQ 建立链接

    启动时终端界面

    zipkin启动

    此时再查看以下RabbitMQ,有一个地址已经连接上了

    已连接

    zipkin也已经启动

    docker 模式启动

    • 编写docker-compose.yml文件
    version: '2'
    services:
      zipkin:
        container_name:  zipkin
        image: openzipkin/zipkin
        environment:
          - RABBIT_ADDRESSES=ivms.io:5672
          - RABBIT_USER=guest
          - RABBIT_PASSWORD=guest
        ports:
          - 9411:9411
    
    • 在文件目录下执行 docker-compose up -d

    配置微服务

    • 各微服务中加入以下依赖
    <dependency> 
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    <dependency> 
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit</artifactId>
    </dependency>
    

    参考上一篇文章 springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)
    此时配置如下

    zipkin:
        #base-url: http://192.168.2.28:9411
        sender:
          type: rabbit
      sleuth:
        sampler:
          probability: 0.1
          rate: 2
      rabbitmq:
        addresses: ivms.io:5672
    

    注:指定sender.type为rabbit后,base-url就不需要了,其他一致

    其他的不用改,也有人在微服务中添加了下面的配置,但效果是一样的,可以试一下

    #如果是使用rabbitmq则需要下面的配置
    spring.zipkin.sender.type= rabbit
    #添加rabbitmq的配置
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.poassword=guest
    spring.rabbitmq.listener.direct.retry.enabled=true
    spring.rabbitmq.listener.simple.retry.enabled=true
    

    启动微服务测试

    启动微服务,发起一个请求,观察变化如下:
    zipkinUI接收到数据

    rabbitMQ接收到数据.

    到此我们的服务已经调试成功!

    如果需要加入Elasticsearch,也非常简单,安装步骤参考

    docker部署运行ES

    然后在启动命令中加入ES配置就可以

    java -jar zipkin-server-2.9.4-exec.jar --zipkin.collector.rabbitmq.addresses=localhost  --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://127.0.0.1:9200
    

    参考文章:https://blog.csdn.net/zhangcongyi420/article/details/100809550


    进阶中的菜鸟,欢迎留言探讨,指正不足!

    邮箱:2754371607@qq.com 交友: 同款QQ号
  • 相关阅读:
    ISO/IEC 9899:2011 条款6.6——常量表达式
    ISO/IEC 9899:2011 条款6.5.17——逗号操作符
    ISO/IEC 9899:2011 条款6.5.16——赋值操作符
    ISO/IEC 9899:2011 条款6.5.15——条件操作符
    ISO/IEC 9899:2011 条款6.5.10——按位与操作符
    ISO/IEC 9899:2011 条款6.5.9——相等操作符
    php正则表达式入门-常用语法格式
    史上最全PHP正则表达式实例汇总
    mysql数据库TINYINT取值范围详解
    Sql Server删除数据表中重复记录 三种方法
  • 原文地址:https://www.cnblogs.com/gyyyblog/p/11594412.html
Copyright © 2020-2023  润新知