- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Dubbo框架如何和调用链整合
2021-10-23
前言: 随着dubbo的开源, 以及成为apache顶级项目. dubbo越来越遭到国内java developer欢迎, 甚至成为服务化自治的首选方案. 随着微服务的流行, 如何跟踪整个调用链, 成了一个课题. 大家能够达成全都的思路, 在调用中添加traceId/logid信息, 至于如何实现, 各家都有本人的思路. 本文将对比几种方案, 重点讲解利用dubbo的自定义filter的机制, 来实现traceId/logid的透传.
?
方案一: 这个方案也是最直接的方法, 正如所谓所见即所得, 就是在dubbo的接口参数添加traceId/logid参数. 比如如下的sample代码: ? ?
@Getter
@Setter
class EchoReq {
// *) 消息
private String message;
// *) 跟踪ID
private String traceId;
}
// *) dubbo的接口定义
interface EchoService {
String echo1(EchoReq req);
String echo2(String message, String traceId);
}
? ? 信任大家一看就明白了其中的思路, 这种思路的确简约粗暴. 对于对于有洁癖的程序员而言, 在业务接口中, 生硬地添加traceId/logid, 明显破坏无侵入性准绳.
?
方案二: 该方案需要修改dubbo源码, 通过把traceId/logid注入到RPCInvocation对象(dubbo底层transport实体)中, 从而实现traceId/logid的透传.
?
RpcContext方案: 在具体讲解自定义filter来实现透传traceId/logid的方案前, 我们先来争辩下RpcContext对象. 其RpcContext本质上是个ThreadLocal对象, 其维护了一次rpc交互的上下文信息.
public class RpcContext {
// *) 定义了ThreadLocal对象
private static final ThreadLocal LOCAL = new ThreadLocal() {
protected RpcContext initialValue() {
return new RpcContext();
}
};
// *) 附带属性, 这些属性可以随RpcInvocation对象一起传递
private final Map attachments = new HashMap();
public static RpcContext getContext() {
return (RpcContext)LOCAL.get();
}
protected RpcContext() {
}
public String getAttachment(String key) {
return (String)this.attachments.get(key);
}
public RpcContext setAttachment(String key, String value) {
if(value == null) {
this.attachments.remove(key);
} else {
this.attachments.put(key, value);
}
return this;
}
public void clearAttachments() {
this.attachments.clear();
}
}
????注:?RpcContext里的attachments信息会填入到RpcInvocation对象中, 一起传递过去.?
????因而有人就建议可以简约的把traceId/logid注入到RpcContext中, 这样就可以简约的实现traceId/logid的透传了, 现实能否如此, 先让我们来一起实践一下.
定义dubbo接口类:
public?interface?IEchoService?{
????Strin
您可能关注的文档
- 分钟掌握 Python 中的 Hook 钩子函数.docx
- 名达摩院“扫地僧”加持,阿里云的下一个十年.docx
- 条实践助你更好地完成代码评审.docx
- 美国硅谷程序员调查:平均年薪 万,后端人才“吃香”.docx
- + 顶级开源 Kubernetes 工具列表.docx
- Alibaba Sentinel 限流、熔断实现详解.docx
- +倍性能提升全过程优酷账号绑定淘宝账号的TPS从到的优化历程.docx
- Antd 代码彩蛋炸翻一圈人.docx
- Apache Kafka . 发布,离彻底去掉 ZooKeeper 更进一步.docx
- Apache Kafka服务端设计理念.docx
- Dubbo分析之心跳设计.docx
- eBay 管理庞大服务架构的新方法.docx
- ElasticSearch + Canal 开发千万级的实时搜索系统.docx
- ElasticJob 的产品定位与新版本设计理念.docx
- Elasticsearch 的亿级数据毫秒级查询优化思路.docx
- ElasticSearch 索引设置总结.docx
- Elasticsearch 集群健康值红色终极解决方案.docx
- Elasticsearch中Head插件的使用.docx
- Eureka和zookeeper都可以提供服务注册与发现的功能,说说两个的区别?.docx
- Facebook 强一致性键值存储 ZippyDB 架构简介.docx
最近下载
- 朝花夕拾名著导读练习及答案.pdf VIP
- 乳腺癌根治手术配合.pptx VIP
- Unit 6 Numbers in life Part A Let's talk Count and say 课件人教版英语三年级下册2025.pptx
- chapter 2 中国哲学及宗教.ppt VIP
- 初级统计师资格考试(统计专业知识和实务)模拟题库及答案(运城2025年).docx VIP
- 危急值报告制度及流程Ppt.ppt VIP
- 初中数学与体育融合的跨学科主题教学策略分析教学研究课题报告.docx
- 京瓷 TASKalfa 2554ci 3554ci 彩色复印机中文维修手册.pdf VIP
- 最新人教版九年级数学上册-全册课件全集(1215张).pptx VIP
- 海尔WGG 冰箱售后服务手册型号: BCD-430WACS.PDF
文档评论(0)