由于微服务之间的调用比较复杂,一般用sleuth跟踪请求调用。
1.sleuth的简单使用
1>.添加sleuth的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
书接上文,我们有一个provider和一个consumer都注册到了注册中心,并且provider提供了一个login的方法。
2>.配置application.yml
logging:
level:info
3>.这样在日志中就可以看到日志的信息
2.sleuth整合zipkin(开源,数据追踪系统)
1>.新建spring Initializer项目dm-zipkin-server
2>.添加zipkin相关的依赖
<properties>
<java.version>1.8</java.version>
<zipkin.version>2.12.2</zipkin.version>
</properties>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>${zipkin.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>${zipkin.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-mysql</artifactId>
<version>${zipkin.version}</version>
</dependency>
3>.添加注解
@SpringBootApplication
@EnableZipkinServer
public class ZipkinServerApplication {...}
4>.配置application.yml
# 配置端口之后就可以通过http://localhost:7700访问到微服务追踪的管理界面
server:
port: 7700
spring:
application:
name: zipkin-server
5>.整合zipkin到需要追踪的服务中(dm-user-consumer,dm-user-provider)
firstly,在要追踪的服务中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
furthermore,在需要追踪的微服务中,指定zipkin server的地址和采样率。
spring:
zipkin:
base-url: http://localhost:7700
sleuth:
sampler:
probability: 1.0 # percentage: 1.0 1.0表示100%采样
则可以在http://localhost:7700看到追踪的请求
3.数据追踪可能产生的问题
问题一:耦合性,需要追踪的服务都需要连接到zipkin server
问题二:不稳定性,网络出现问题就无法保证收集到跟踪数据
解决方案:使用消息中间件,收集到的数据先发到消息中间件(RabbitMQ),然后zipkin server再从消息中间件取出收据进行分析
问题三:重启zipkin server之后,追踪到的数据会丢失
解决方案:数据持久化存储 mySQL
zipkin:
storage:
type: mysql
mysql:
jdbcUrl: jdbc:mysql://localhost:3306/zipkin?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: abcdefg
management:
metrics:
web:
server:
auto-time-requests: false #不加会启动报错
3.发送日志信息到kafka
1>.新建spring Initializer项目dm-kafka-client
2>.添加kafka依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
网友评论