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 搜索全部 点击 进行查看
在 页面中 显示了 方法详细的调用 与调用花费的时间