1. 程式人生 > >Spring Cloud Sleuth與Zipkin整合時遇到的問題記錄

Spring Cloud Sleuth與Zipkin整合時遇到的問題記錄

    在《spring cloud 微服務實戰》第402頁-----將spring cloud sleuth的跟蹤資訊通過訊息中介軟體收集傳送到zipkin這一部分,在之前你已經按照第一種方式(http方式)將跟蹤資訊收集到了zipkin上,現在又跟著書上用訊息中介軟體來收集。緊接著書上說只要對之前的trace-1和trace-2以及zipkin-server這三個專案做一些改造就可以實現,書上分兩步來完成改造。你按照書上的進行改造發現有可能執行不成功。

    首先第一步:修改客戶端trace-1和trace-2,書上說除了引入spring-cloud-starter-sleuth依賴外,還要引入一下兩個

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-stream-rabbit</
artifactId> </dependency>
但是你啟動專案時會報如下錯,根本啟動不成功:

Parameter 0 of method sleuthStreamSpanReporter in org.springframework.cloud.sleuth.stream.SleuthStreamAutoConfiguration required a bean of type 'org.springframework.cloud.sleuth.stream.HostLocator' that could not be found.
    - Bean method 'zipkinEndpointLocator' not loaded because @ConditionalOnProperty (spring.zipkin.locator.discovery.enabled=true) did not find property 'spring.zipkin.locator.discovery.enabled'


Action:

Consider revisiting the conditions above or defining a bean of type 'org.springframework.cloud.sleuth.stream.HostLocator' in your configuration.

   原因是你如果直接在前面建立的trace-1和trace-2上修改,僅僅新增上面那兩個依賴是不夠的,你還要將之前用http方式實現收集的依賴去掉,否則會衝突,專案起不來

<!--<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>-->
   把這個注掉以後專案能運行了(trace-1和trace-2都要注掉),一切都看似正常;但是當你不斷的傳送http:/localhost:9101/trace-1除錯的時候,你明明看到rabbitmq訊息佇列裡面已經有訊息進入了,但是開啟zipkin的ui介面卻什麼資訊都沒有。這不正常啊,後來到作者的git倉庫看隨書程式碼示例,才發現zipkin-server的改造除了要加書上提的依賴以外,還要將主類上的註解修改為如下:
@EnableZipkinStreamServer
@SpringBootApplication
public class ZipkinServerApplication {
   
   public static void main(String[] args) {
      SpringApplication.run(ZipkinServerApplication.class, args);
   }
}
      剛開始用http方式收集用的是@EnableZipkinServer註解,後來用訊息代理收集,就要改成@EnableZipkinStreamServer註解,為什麼書上改造的時候不說要改這個,害得我納悶半天,就是沒有反應;書上內容真不嚴謹,太坑了。另外zipkin-server這邊的application.properties中也要加入rabbitmq的配置資訊(書上沒說),修改完後,再發送請求,開啟zipkin的UI介面,如願看到了跟蹤資訊

      最後一個問題是在將服務跟蹤資訊持久化到mysql時,我按照書上第416頁採用在application.properties新增mysql的配置資訊這種方式來初始化表資訊的方式,啟動專案的時候一直報com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'zipkin',後來才明白不管你是採用手動建表還是這種配置的方式自動初始化表,都要先手動建立資料庫zipkin,要不然就會一直報那個錯,我以為它會還會幫你初始化資料庫,看來理解錯了