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

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

Linux命令(11):系统信息查看命令

系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv