隨着系統規模愈來愈大,微服務之間調用關係變得錯綜複雜,一條調用鏈路中可能調用多個微服務,任何一個微服務不可用均可能造整個調用過程失敗java
spring cloud sleuth 能夠跟蹤調用鏈路,分析鏈路中每一個節點的執行狀況git
修改如下微服務的 pom.xml,添加 sleuth 依賴github
編輯起步依賴,分別 sleuth
依賴
web
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
四個微服務的控制檯日誌中,能夠看到如下信息:[服務id,請求id,span id,是否發送到zipkin]
spring
[zuul,6c24c0a7a8e7281a,6c24c0a7a8e7281a,false]
[order-service,6c24c0a7a8e7281a,993f53408ab7b6e3,false]
[item-service,6c24c0a7a8e7281a,ce0c820204dbaae1,false]
[user-service,6c24c0a7a8e7281a,fdd1e177f72d667b,false]bootstrap
生成鏈路跟蹤日誌的工具服務器
能夠收集鏈路跟蹤數據,提供可視化的鏈路分析app
默認 10% 的鏈路數據會被髮送到 zipkin 服務。能夠配置修改抽樣比例spring-boot
spring: sleuth: sampler: probability: 0.1
java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
微服務
修改如下微服務
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
若是沒有配置過 spring cloud bus,還須要添加 rabbitmq
依賴和鏈接信息
eureka客戶端向eureka註冊時, 會自動選擇網卡, 並可能註冊主機名而不是ip地址.
下面配置能夠選擇正確網卡的ip向eureka進行註冊.
服務器有多塊網卡,要選擇正確網卡的ip地址向eureka進行註冊
修改 bootstrap.yml
spring: cloud: inetutils: ignored-interfaces: # 忽略的網卡 - VM.* preferred-networks: # 要是用的網卡的網段 - 192.168.0
註冊時,有可能自動選擇主機名進行註冊,而不使用ip地址. 主機名在局域網內有可能不會被正確的解析
最好使用ip地址進行註冊,而不註冊主機名
在應用配置application.yml
中配置:
eureka: instance: prefer-ip-address: true # 使用ip進行註冊 instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # 界面列表中顯示的格式也顯示ip
post 請求消息總線刷新端點,服務器會向 rabbitmq 發佈刷新消息,接收到消息的微服務會向配置服務器請求刷新配置信息
修改如下微服務
使用 STS 編輯起步依賴,分別添加 bus
、rabbitmq
依賴
修改5個項目
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-bus</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test</scope> </dependency>
在如下配置文件中修改:
注意:
spring: ...... rabbitmq: host: 192.168.64.140 port: 5672 username: admin password: admin
修改 sp12-config 項目的 application.yml, 暴露bus-refresh
端點
management: endpoints: web: exposure: include: bus-refresh
注意:
能夠把配置文件保存在配置中心服務的 resources 目錄下,直接訪問本地文件
spring.profiles.active=native
來激活本地文件系統[classpath:/, classpath:/config, file:./, file:./config]
spring: application: name: config-server profiles: active: native cloud: config: server: native: search-locations: classpath:/config # git: # uri: https://github.com/你的用戶路徑/sp-config # searchPaths: config # username: your-username # password: your-password rabbitmq: host: 192.168.64.140 port: 5672 username: admin password: admin server: port: 6001 eureka: client: service-url: defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka management: endpoints: web: exposure: include: bus-refresh