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

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置