Dubbo框架如何和调用链整合.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档