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

進階中的菜鳥,歡迎留言探討,指正不足!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM