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

    微信公众号:

                          

    转载请注明出处
  • 相关阅读:
    ADO.NET入门教程(五) 细说数据库连接池
    Delphi下使用指针的简单总结
    Delphi
    Delphi
    Delphi
    TXLSReadWriteII5 单元格读写
    [Delphi]Delphi开发的一些技巧
    TXLSReadWriteII2版本导出Excel文件:
    Tomcat使用startup启动,一闪而过,如何查看出错信息
    【转】Java保留固定小数位的4种方法
  • 原文地址:https://www.cnblogs.com/saaav/p/6814055.html
Copyright © 2011-2022 走看看