使用Spring Cloud Sleuth实现链路追踪

Spring Cloud 提供的服务治理功能

依赖

  • 提供了Spring Cloud Sleuth - spring-cloud-starter-sleuth功能
  • 引入Spring Cloud Sleuth with Zipkin - spring-cloud-starter-zipkin依赖

日志输出

  • [appname,traceId,spanId,exportable]

exportable:埋的点是否输出到外部的系统里面 一般输出到zipkin里面

配置

  • spring.zipkin.base-url=http://localhost:9411/
    配置url
    • spring.zipkin.discovery-client-enabled=false

  • spring.zipkin.sender.type=web | rabbit | kafka
    提供HTTP请求(每次发个web请求 将信息埋过去)/ rabbtimq kafka 通过message方式发送 向 zipkin 埋点

  • spring.zipkin.compression.enabled=false
    是否做一个压缩

  • spring.sleuth.sampler.probability=0.1
    sleuth采样的比例

通过 Docker 启动 Zipkin

官方指引

  • https://hub.docker.com/r/openzipkin/zipkin
  • https://github.com/openzipkin/docker-zipkin

获取镜像

  • docker pull openzipkin/zipkin

运行 Zipkin 镜像

  • docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin
    启动zipkin 端口号为9411

实例

由 sleuth-customer-service 和 sleuth-waiter-service 两部分组成
sleuth-waiter-service
代码不变
application.properties

spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.show_sql=false
spring.jpa.properties.hibernate.format_sql=false
# 用来解决 LazyInitializationException: no Session
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

# 运行过一次后,如果不想清空数据库就注释掉下面这行
spring.datasource.initialization-mode=always

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

info.app.author=DigitalSonic
info.app.encoding=@project.build.sourceEncoding@

spring.output.ansi.enabled=ALWAYS

server.port=8080

spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.sampler.probability=1.0
全部采样
spring.zipkin.sender.type=web

spring.datasource.url=jdbc:mysql://localhost:3306/springbucks?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

order.discount=95

resilience4j.ratelimiter.limiters.coffee.limit-for-period=5
resilience4j.ratelimiter.limiters.coffee.limit-refresh-period-in-millis=30000
resilience4j.ratelimiter.limiters.coffee.timeout-in-millis=5000
resilience4j.ratelimiter.limiters.coffee.subscribe-for-events=true
resilience4j.ratelimiter.limiters.coffee.register-health-indicator=true

resilience4j.ratelimiter.limiters.order.limit-for-period=3
resilience4j.ratelimiter.limiters.order.limit-refresh-period-in-millis=30000
resilience4j.ratelimiter.limiters.order.timeout-in-millis=1000
resilience4j.ratelimiter.limiters.order.subscribe-for-events=true
resilience4j.ratelimiter.limiters.order.register-health-indicator=true

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=spring
spring.rabbitmq.password=spring

spring.cloud.stream.bindings.finishedOrders.group=waiter-service
spring.cloud.stream.rabbit.bindings.notifyOrders.producer.routing-key-expression=headers.customer

sleuth-customer-service
代码不变 配置改变

server.port=8090

customer.name=spring-${server.port}

spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.sampler.probability=1.0
spring.zipkin.sender.type=web

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

spring.output.ansi.enabled=ALWAYS

feign.client.config.default.connect-timeout=500
feign.client.config.default.read-timeout=500

spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.pref er-ip-address=true

resilience4j.circuitbreaker.backends.order.failure-rate-threshold=50
resilience4j.circuitbreaker.backends.order.wait-duration-in-open-state=5000
resilience4j.circuitbreaker.backends.order.ring-buffer-size-in-closed-state=5
resilience4j.circuitbreaker.backends.order.ring-buffer-size-in-half-open-state=3
resilience4j.circuitbreaker.backends.order.event-consumer-buffer-size=10

resilience4j.circuitbreaker.backends.menu.failure-rate-threshold=50
resilience4j.circuitbreaker.backends.menu.wait-duration-in-open-state=5000
resilience4j.circuitbreaker.backends.menu.ring-buffer-size-in-closed-state=5
resilience4j.circuitbreaker.backends.menu.ring-buffer-size-in-half-open-state=3
resilience4j.circuitbreaker.backends.menu.event-consumer-buffer-size=10

resilience4j.bulkhead.backends.order.max-concurrent-call=1
resilience4j.bulkhead.backends.order.max-wait-time=5

resilience4j.bulkhead.backends.menu.max-concurrent-call=5
resilience4j.bulkhead.backends.menu.max-wait-time=5

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=spring
spring.rabbitmq.password=spring

spring.cloud.stream.rabbit.bindings.notifyOrders.consumer.binding-routing-key=${customer.name}

结果分析

在docker中 运行consul zipkin 和 rabbitmq
启动
输入 http://localhost:9411/zipkin/ 进入zipkin
在这里插入图片描述
进入 postman 进行测试 查询菜单
在 zipkin 搜索全部 点击 进行查看
在这里插入图片描述
在 页面中 显示了 方法详细的调用 与调用花费的时间
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值