• dubbo隐式传参


    dubbo隐式传参

    1、预备知识

    说明:以下只使用于使用 InternalThread 的情况,使用Thread的不建议使用InternalThreadLocal

    1. InternalThreadLocalMap

    常用属性

    Object[] indexedVariables: 对象数据用于数据存储;

    static final AtomicInteger NEXT_INDEX:用于记录InternalThreadLocal实例位于数组中的位置。

    2. InternalThread

    常用属性

    InternalThreadLocalMap threadLocalMap : 用于存储当前线程中的InternalThreadLocal实例内容。

    3. InternalThreadLocal

    一个类似ThreadLocal的类。

    InternalThreadLocal实例的index用于判断线程内 InternalThreadLocalMap 属性的内部数组的位置。

    2、RpcContext 类

    全类名:org.apache.dubbo.rpc.RpcContext ;

    作用:一个线程共享数据的处理类,使用静态的**InternalThreadLocal**的实例属性 LOCAL 存储入参内容, SERVER_LOCAL存储出参内容。

    3、ConsumerContextFilter类

    全类名:org.apache.dubbo.rpc.filter.ConsumerContextFilter

    作用:

    a. 服务作为消费者调用其他生产者时,会执行其**invoke(Invoker<> invoker, Invocation invocation)**方法,调用RpcContext设置调用地址等信息,remove当前线程的SERVER_LOCAL实例对应的map,处理结束后remove当前线程的LOCAL实例对应的map。

    b. 内部类ConsumerContextListener负责将传回来的隐性参数添加到当前线程的LOCAL实例对应的map中。

    3、ContextFilter 类

    全类名: org.apache.dubbo.rpc.filter.ContextFilter

    作用:

    a. 服务作为生产者被调用时会执行其**invoke(Invoker<> invoker, Invocation invocation)**方法,接收隐性参数并设置到当前服务的线程的InternalThreadLocalMap中。

    b. 内部类ContextListener负责将传递过来的map添加到当前线程的LOCAL实例对应的map中。

    4、目前公司方案

    1. 自定义ConsumerFilter类

    全类名:com.casstime.saas.dubbo.filter.ConsumerFilter extends ListenableFilter

    作用:invoke(Invoker<> invoker, Invocation invocation)方法中实现session、crm session、链路跟踪和客户端信息 传递,从而实现登录信息隐性传递。

    内部类:ConsumerResultListener 暂未使用,部分代码注释

    2. 自定义ProviderFilter类

    全类名:com.casstime.saas.dubbo.filter.ProviderFilter extends ListenableFilter

    作用:invoke(Invoker<> invoker, Invocation invocation) 方法中实现 session、crm session、链路跟踪和客户端信息 接收,从而获取来自消费者的用户信息。

    内部类:ProviderResultListener 暂未使用,部分代码已注释

    3. 自定义DubboConfig类

    全类名:com.casstime.saas.dubbo.config.DubboConfig

    作用:

    a. 将上述两个自定义类配置到配置文件com.alibaba.dubbo.rpc.Filter后,采用此配置类 实例化 到bean容器中。

    b. 定义了dubbo生产者和消费者的xml文件路径。

    c. 其他(暂未了解)

  • 相关阅读:
    超声波传感器(CHx01&ICU-x0201&ICU-30201) - 资源抢先看(资料获取)
    【GoWeb项目-个人Blog】数据库表设计
    RocketMQ源码(16)—消费者负载均衡服务RebalanceService入口源码
    MSDC 4.3 接口规范(22)
    无人机反制:车载侦测干扰一体设备技术详解
    ArrayList与顺序表
    python基于GDAL的多线程高速批量重采样、对齐栅格、对齐行列数,并无损压缩
    迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)
    web-view 调用微信小程序的方法
    Session与Cookie
  • 原文地址:https://blog.csdn.net/m0_52789121/article/details/126358011