随着系统规模愈来愈大,微服务之间调用关系变得错综复杂,一条调用链路中可能调用多个微服务,任何一个微服务不可用均可能造整个调用过程失败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