在上一節《spring-cloud-sleuth+zipkin追蹤服務實現(一)》中,咱們使用microservice-zipkin-server、microservice-zipkin-client、microservice-zipkin-client-backend 三個程序實現了使用http方式進行通訊,數據持久化到內存中的服務調用鏈路追蹤實現。
在這裏咱們作兩點改動,首先是數據從保存在內存中改成持久化到數據庫,其次是將http通訊改成mq異步方式通訊。java
咱們仍是使用以前上一節中的三個程序作修改,方便你們看到對比不一樣點。這裏每一個項目名都加了一個stream,用來表示區別。mysql
要將http方式改成經過MQ通訊,咱們要將依賴的原來依賴的io.zipkin.java:zipkin-server換成spring-cloud-sleuth-zipkin-stream和spring-cloud-starter-stream-rabbit
同時要使用mysql持久化,咱們須要添加mysql相關依賴。
所有maven依賴以下:git
``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--zipkin依賴--> <!--此依賴會自動引入spring-cloud-sleuth-stream而且引入zipkin的依賴包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <scope>runtime</scope> </dependency> <!--保存到數據庫須要以下依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ```
添加以上maven依賴後,咱們將啓動類ZipkinServer中@EnableZipkinServer註解替換成@EnableZipkinStreamServer,
具體以下:github
package com.yangyang.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer; /** * Created by chenshunyang on 2017/5/24. */ @EnableZipkinStreamServer// //使用Stream方式啓動ZipkinServer @SpringBootApplication public class ZipkinStreamServerApplication { public static void main(String[] args) { SpringApplication.run(ZipkinStreamServerApplication.class,args); } }
點擊@EnableZipkinStreamServer註解的源碼咱們能夠看到它也引入了@EnableZipkinServer註解,同時還建立了一個rabbit-mq的消息隊列監聽器。
spring
以方便接收從消息客戶端收集發過來的mq消息。sql
因爲使用了消息中間件rabbit mq以及mysql,因此咱們還須要在配置文件application.properties加入相關的配置:數據庫
server.port=11020 spring.application.name=microservice-zipkin-stream-server #zipkin數據保存到數據庫中須要進行以下配置 #表示當前程序不使用sleuth spring.sleuth.enabled=false #表示zipkin數據存儲方式是mysql zipkin.storage.type=mysql #數據庫腳本建立地址,當有多個是可以使用[x]表示集合第幾個元素 spring.datasource.schema[0]=classpath:/zipkin.sql #spring boot數據源配置 spring.datasource.url=jdbc:mysql://localhost:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.initialize=true spring.datasource.continue-on-error=true #rabbitmq配置 spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
其中zipkin.sql直接到官網去拷貝,也能夠從本demo中拷貝
爲了不http通訊的干擾,咱們將原來的監聽端口有11008更改成11020,啓動程序,未報錯且可以看到rabbit鏈接日誌,說明程序啓動成功。app
與上一節中的配置同樣,客戶端的配置也很是簡單,maven依賴只須要將原來的spring-cloud-starter-zipkin替換爲以下兩個依賴便可異步
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
此外,在配置文件中也加上鍊接MQ的配置maven
server: port: 11021 spring: application: name: microservice-zipkin-stream-client #rabbitmq配置 rabbitmq: host: 127.0.0.1 port : 5672 username: guest password: guest
固然爲了以示區別,端口也作了相應的調整
按照上一節的方式訪問:http://localhost:11021/call/1,咱們能夠上一節,說明rabbit-mq方式通訊的sleuth功能已經生效了。
咱們屢次訪問consumer的地址能夠看到日誌中,請求的耗時時間不會再次出現忽然耗時特長的狀況。
爲了體驗MQ通訊給咱們帶來的數據不丟失的特色,咱們將數據庫中的數據清空,而後刷新zipkin server的界面,能夠看到再也不有數據
而後咱們將zipkin-server程序想關閉,而後再屢次訪問consumer的地址,以後,咱們重啓zipkin server程序,啓動成功後訪問UI界面
很快看到Span Name選項有數據能夠選擇了,同時數據庫中的記錄條數也再也不是以前的0條了
如此說明咱們的zipkin重啓後,從MQ中成功獲取出了在關閉這段時間裏provider和consumer產生的信息數據。這樣咱們使用spring-cloud-sleuth-stream+zipkin方式的rest服務調用追蹤功能就OK了。
https://git.oschina.net/shunyang/spring-cloud-microservice-study.git
https://github.com/shunyang/spring-cloud-microservice-study.git
spring cloud 官方文檔:https://github.com/spring-cloud/spring-cloud-sleuth
第三方:https://yq.aliyun.com/articles/78128?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&201758&utm_content=m_19862