Dubbo上下文信息、隐匿参数附件(六)

2023-12-13 01:32

本文主要是介绍Dubbo上下文信息、隐匿参数附件(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、参考

上下文信息:http://dubbo.apache.org/en-us/docs/user/demos/context.html

隐匿参数:http://dubbo.apache.org/en-us/docs/user/demos/attachment.html

我觉得这两个功能与监控、跟踪、路径分析有关。

2、上下文信息

Dubbo里边的上下文为RpcContext。

首先RpcContext是线程级的,每个线程一份。

RpcContext主要记录调用关系,当Consumer调用别人或者Provider被别人调用后,RpcContext的内容就会更新。比如:A 调 B,B 再调 C,则 B 机器上,在 B 调 C 之前,RpcContext 记录的是 A 调 B 的信息,在 B 调 C 之后,RpcContext 记录的是 B 调 C 的信息。

另外调用发生时,所有的配置信息都会转换成URL,也就是配置信息没有记录在上下文中。

2.1、Consumer端

// 远程调用
xxxService.xxx();
// 本端是否为消费端,这里会返回true
boolean isConsumerSide = RpcContext.getContext().isConsumerSide();
// 获取最后一次调用的提供方IP地址
String serverIP = RpcContext.getContext().getRemoteHost();
// 获取当前服务配置信息,所有配置信息都将转换为URL的参数
String application = RpcContext.getContext().getUrl().getParameter("application");
// 注意:每发起RPC调用,上下文状态会变化
yyyService.yyy();

2.2、Provider端

public class XxxServiceImpl implements XxxService {public void xxx() {// 本端是否为提供端,这里会返回trueboolean isProviderSide = RpcContext.getContext().isProviderSide();// 获取调用方IP地址String clientIP = RpcContext.getContext().getRemoteHost();// 获取当前服务配置信息,所有配置信息都将转换为URL的参数String application = RpcContext.getContext().getUrl().getParameter("application");// 注意:每发起RPC调用,上下文状态会变化yyyService.yyy();// 此时本端变成消费端,这里会返回falseboolean isProviderSide = RpcContext.getContext().isProviderSide();} 
}

很明显上下文是用来明确调用关系的。如果配合上记录配置信息的URL、下边介绍的“隐匿参数”,然后每当上下文发生变化时,将这些信息打印出来,这样关于调用的信息就会被完整的记录,通过分析这些日志,似乎可以达到性能分析、调用路径分析等功能。

3、附件或者隐匿参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFsYJb5d-1648771321731)(http://dubbo.apache.org/docs/en-us/user/sources/images/context.png)]

从功能上看,这个东西有点像HTTP请求或者应答中的请求头部或者应答头部。如果没有,不影响业务逻辑的正常执行,如果有,则相当于向对方提供了额外的附加信息,往往能够得到更好的效果或者额外附加的功能。

HTTP中这种额外信息通过“头部”交换,在Dubbo中这种东西放在RpcContext中,它是键值对,每次调用都会清空,所以调用一次要分配一次。

在Consumer端设置:

RpcContext.getContext().setAttachment("index", "1"); // implicitly pass parameters,behind the remote call will implicitly send these parameters to the server side, similar to the cookie, for the framework of integration, not recommended for regular business use
xxxService.xxx(); // remote call
// ...

在Provider端提取:

public class XxxServiceImpl implements XxxService {public void xxx() {// get parameters which passed by the consumer side,for the framework of integration, not recommended for regular business useString index = RpcContext.getContext().getAttachment("index");}
}

假如调用路径比较复杂,像A->B->C->D->E,并且每个服务都是多实例。对于某一个具体的调用,如果想跟踪具体调用路径、响应时间等。可以在A调用B时分配一个唯一ID,结合上边的上下文记录下来A到底调用了那个B,什么时候调用的,并且唯一ID标识。然后B也做同样的动作,依次是后边的C、D、E等。然后通过分析这些记录,就可以知道这次调用具体经过的路径是什么、经过每个节点都花了多少时间等。

这篇关于Dubbo上下文信息、隐匿参数附件(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/486690

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法