• dubbox的provider端嵌套调用问题


      今天遇到了一个问题,查了半天。。。,情况是这样的,我用的是dubbox,想做一个精简的全链路跟踪,一个消费者通过dubbox调用一个Service, service 里另外调用了两个service:

      A服务被调用时,通过dubbo的Filter接收了一个参数,这个参数是附加在Invocation实例中的,像这样:

    这是调用方:

    这是被调用方:

      情况大体如此,当调用的b的服务时,这个参数被正确传递了,但是调用c的时候,就是收不到。

      问题产生的原因跟了一下dubbox的代码发现,Filter执行的最后会触发一个自带的ConsumerContextFilter的执行:

      注意最后一句,它清除了所有的附加值。那为什么b能收到呢,自然是因为是调用方在做清理工作,所以是调用a的那台服务器执行的,当然清不到b的,但是b执行完了,c就。。。

      解决办法也简单,给存在service互相调用的Provider端也配上SendFilter,在这个Filter中用比如ThreadLocal什么的保存一下只,每次发都带出去,不过如果用ThreadLocal要注意一点,当所有调用都执行完了,一定要清理掉,不然这个线程一旦被线程池复用,就可能出现问题。

    ==========================================================

    咱最近用的github:https://github.com/saaavsaaa

    微信公众号:

                          

    转载请注明出处
  • 相关阅读:
    CSS截断字符串
    [VB.NET] 打印DataGridView类
    [C#] 打印DataGridView类
    [MySQL] errno:150
    [C#] 用户自定义控件(含源代码)透明文本框
    [分享] 微软面试题
    [C#] 用户自定义控件(含源代码)圆角Panel
    [MySQL] 史上最全的MySQL备份方法
    [C#(WebForm)] 利用递归遍历文件夹和文件存入TreeView
    [VB] (开源)VB高仿Windows7桌面炫丽版
  • 原文地址:https://www.cnblogs.com/saaav/p/6814055.html
Copyright © 2020-2023  润新知