跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持, 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是一篇关于如何使用此出色的库添加对分布式跟踪支持的简要说明。

考虑两个应用程序–一个使用上游服务应用程序的客户端应用程序,都使用Spring WebFlux ( Spring的反应式Web堆栈):

Spring Cloud Sleuth样本流

我的目标是确保可以跟踪从用户到客户端应用程序再到服务应用程序的流,并清晰记录请求的延迟。

Spring Cloud Sleuth启用的最终拓扑如下:

Spring Cloud Sleuth流动拉链

来自客户端和服务应用程序的采样跟踪信息通过RabbitMQ之类的排队机制导出到Zipkin。

那么,对客户端和服务应用程序需要进行哪些更改–就像我说的那样,非常简单! 需要引入以下库–在我的情况下是通过gradle引入的:

compile("org.springframework.cloud:spring-cloud-starter-sleuth")compile("org.springframework.cloud:spring-cloud-starter-zipkin")compile("org.springframework.amqp:spring-rabbit")

未指定版本,因为期望通过Spring Cloud BOM引入这些版本,这要归功于Spring Gradle Dependency Management插件 :

ext {springCloudVersion = 'Finchley.RELEASE'
}apply plugin: 'io.spring.dependency-management'dependencyManagement {imports {mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"}
}

就是这样,应用程序中的所有日志现在都应该开始记录跟踪和跨度,请参阅以下跨两个不同服务的日志中的traceid记录:

2018-06-22 04:06:28.579  INFO [sample-client-app,c3d507df405b8aaf,c3d507df405b8aaf,true] 9 --- [server-epoll-13] sample.load.PassThroughHandler           : handling message: Message(id=null, payload=Test, delay=1000)
2018-06-22 04:06:28.586  INFO [sample-service-app,c3d507df405b8aaf,829fde759da15e63,true] 8 --- [server-epoll-11] sample.load.MessageHandler               : Handling message: Message(id=5e7ba240-f97d-405a-9633-5540bbfe0df1, payload=Test, delay=1000)

此外,Zipkin UI还记录了导出的信息,并可以通过以下方式直观地显示示例跟踪:

Spring Cloud Sleuth拉链皮

该示例可在我的github存储库中找到 – https://github.com/bijukunjummen/sleuth-webflux-sample,可以使用docker-compose轻松启动,并插入所有依赖项。

翻译自: https://www.javacodegeeks.com/2018/06/reactive-flow-spring-cloud-sleuth.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DNS域名解析协议(深信服X计划)

文章目录一、DNS协议背景二、DNS协议概述三、DNS工作原理四、DNS常用的记录及作用一、DNS协议背景 在Internet网中连接着数量众多的主机,要让这些主机进行通信,需要有一套名字标识体系,让主机之间能够彼此找到对方,我们可以用多种…

【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码

1、内存四区特点 a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cd b)堆、全局区(静态区)、字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快; 2、C语言与C++编译器的区别: a)所有的.c文件在VC或者VS编译器中按C编译器编译; b)所有的.cp…

基于51单片机的温度检测监测报警系统设计

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发生关键词:单片…

【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统

从本文开始,后续将陆续发布C++语法与数据结构的相关内容,同样还是以学生管理系统来融汇贯通所有知识点。 接上篇博客【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组C++中定义CStudent类 文件名:Student.h typede…

rest 验证demo_如何实现REST资源的输入验证

rest 验证demo如何实现REST资源的输入验证 我正在使用的SaaS平台具有一个RESTful接口,该接口可以接受XML有效负载。 实施REST资源 对于像我们这样的Java商店,使用JAX-B从XML Schema生成JavaBean类是有意义的。 在像Jersey的JAX-RS环境中,使…

校园点餐系统:点餐、食堂管理、商户管理和菜品管理(Java和MySQL)

微信公众号:创享日记 发送关键词:校园点餐系统 获取报告数据库设计说明项目源码源文件工程文件 1 实验环境 操作系统:Windows 10,主要开发工具:PowerDesign,MySQL,Eclipse 2 实验过程 2.1 系统…

病情预测:指示病情程度、预测病情指标(深度学习和Python)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:病情…

QueryDSL中包含通配符的字符串的精确匹配

在我们最近的一个项目中,我们的客户要求一个搜索字段,该字段可以搜索名字,姓氏和电子邮件地址,唯一的通配符是星号“ *”,表示部分匹配。 听起来很简单,但它使我们陷入了混乱。 在我们的项目中,…

邮件系统(基于SMTP协议和POP3协议-C语言实现)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:邮件…

arp、ethernet、icmp、udp、ip协议的C语言实现(计算机网络协议栈实验)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:协议…

jpa获取session_JPA 2 | 获取联接以及我们是否应该使用它们

jpa获取session介绍 最近,我一直在与JPA 2中的FETCH JOINS一起使用,以期从数据库中急切地获取数据,并且我学到了很多关于为什么在日常操作中应避免使用Fetch Joins的知识。 今天的博客文章谈论了我在Fetch上的经历和学习(主要基于…

CPU设计(单周期和流水线)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:cpu …

使用AWS Lambdas扩展技术堆栈

面对现实吧。 调试性能问题很困难,但更难解决。 假设您发现了令人反感的代码,这些代码正在拖慢您的应用的运行速度。 最终会有一段时间,您发现该代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一是将最重的工作负载委…

前馈-反馈控制系统设计(过程控制课程设计matlab/simulink)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:前馈…

感应电机直接转矩控制系统的设计与仿真(运动控制matlab/simulink)

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送关键词:直接…

【2】C++语法与数据结构之MFC_CList学生管理系统_链表内排序_函数指针

MFC中CList类库的遍历 #include <iostream> #include "List.h" using namespace std; void main() {CList list;list.AddHead(33);list.AddHead(88);list.AddHead(99);POSITION pos list.GetHeadPosition();cout << "正向&#xff1a;" <…

neo4j cypher_neo4j / cypher:悬挂查询参数

neo4j cypher一直以来&#xff0c;我一直在使用neo4j的密码查询语言&#xff0c; 迈克尔一直在告诉我在查询中使用参数&#xff0c;但是查询的性能始终可以接受&#xff0c;因此我没有必要。 但是&#xff0c;最近我正在研究一个数据集&#xff0c;并使用类似于以下的代码创建了…

双容水箱液位模糊PID控制系统设计与仿真(Matlab/Simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;双容模糊 获…

基于单片机步进电机控制器设计(正转反转指示灯挡位)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;单片机步进…

【3】C++语法与数据结构之MFC_CList学生管理系统_链表外排序_函数指针

注意&#xff1a;此时排序规则函数定义为全局函数 C中定义CStudent类 文件名&#xff1a;Student.h #pragma once #include <afxtempl.h> typedef struct SUser {int nNumb;char sName[20];float fMath; }DATA;typedef bool(*BY_FUNC)(DATA& q,DATA& m);class…