zoukankan      html  css  js  c++  java
  • 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

    微信公众号:

                          

    转载请注明出处
  • 相关阅读:
    Exercice_3.8
    Exercice_3.13.1_练习使用vector2
    Exercice_3.13_练习使用vetor
    Exercice_3.10_去掉string对象中的标点符号
    Exercice_3.7_判断两个字符串的大小和长度
    1-日期时间视图 2-长按事件
    View(视图)2
    View(视图)
    计算器(UI事件)给按钮添加监听器
    Activity(活动)
  • 原文地址:https://www.cnblogs.com/saaav/p/6814055.html
Copyright © 2011-2022 走看看