• dubbo系列六、SPI扩展Filter隐式传参


    一、实现Filter接口

    1、消费者过滤器:ConsumerTraceFilter.java

    package com.dubbo.demo.Filter;
    
    import com.alibaba.dubbo.rpc.*;
    
    import java.util.Map;
    import java.util.UUID;
    
    public class ConsumerTraceFilter implements Filter {
    
        @Override
        public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
            Map<String, String> stringStringMap = invocation.getAttachments();
            // 设置参数
            stringStringMap.put("patentId","0");
            stringStringMap.put("traceId",UUID.randomUUID().toString());
            System.out.println("生成tradeId:"+stringStringMap.get("traceId"));
            return invoker.invoke(invocation);
        }
    }

    2、生产者过滤器:ProviderTraceFilter.java

    package com.dubbo.demo.Filter;
    
    import com.alibaba.dubbo.rpc.*;
    
    import java.util.Map;
    
    public class ProviderTraceFilter implements Filter {
    
        public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
            Map<String, String> stringStringMap = invocation.getAttachments();
            // 接收参数
            System.out.println("收到:patentId:"+stringStringMap.get("patentId"));
            System.out.println("收到:tradeId:"+stringStringMap.get("traceId"));
            return invoker.invoke(invocation);
        }
    }

    二、配置SPI Filter扩展文件

    1、生产者配置

    在目录:resources/META-INF/dubbo/ 创建com.alibaba.dubbo.rpc.Filter(纯文本文件.txt)

    内容:

    traceFilter=com.dubbo.demo.Filter.ProviderTraceFilter

    2、消费者配置

    在目录:resources/META-INF/dubbo/ 创建com.alibaba.dubbo.rpc.Filter(纯文本文件.txt)

    内容:

    traceFilter=com.dubbo.demo.Filter.ConsumerTraceFilter

    三、配置dubbo文件

    1、生产者

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://code.alibabatech.com/schema/dubbo
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!--过滤器配置-->
        <dubbo:provider filter="traceFilter" />
    <!--dubbo应用程序命名--> <dubbo:application name="dubbo-demo-provider"/> <!--dubbo注册地址--> <dubbo:registry address="zookeeper://192.168.1.100:2181"/> <!--dubbo协议地址--> <dubbo:protocol name="dubbo" port="20880"/> <!--接口声明--> <dubbo:service interface="com.dubbo.demo.api.DemoRpcService" ref="demoRpcService"/> <bean id="demoRpcService" class="com.dubbo.demo.DemoRpcServiceImpl"/> </beans>

    2、消费者

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://code.alibabatech.com/schema/dubbo
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!--过滤器配置-->
        <dubbo:consumer filter="traceFilter" />
    
        <!--dubbo应用程序命名-->
        <dubbo:application name="dubbo-demo-provider"/>
        <!--dubbo注册地址-->
        <dubbo:registry address="zookeeper://192.168.1.100:2181"/>
        <!--接口引用-->
        <dubbo:reference interface="com.dubbo.demo.api.DemoRpcService" id="demoRpcService"/>
    </beans>

    四、验证

    依次启动生产者、消费者发起远程调用

     示例代码:

    https://github.com/Star-Lordxing/dubbo-demo

  • 相关阅读:
    ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」
    [HDU2065] "红色病毒"问题
    [SP1043] GSS1
    [POJ3233] Matrix Power Series
    「网络流24题」圆桌问题
    [BZOJ4260] Codechef REBXOR
    [HDU5536] Chip Factory
    ☆ [HDU4825] Xor Sum「最大异或和(Trie树)」
    「网络流24题」最长不下降子序列问题
    「网络流24题」试题库问题
  • 原文地址:https://www.cnblogs.com/wangzhuxing/p/9738906.html
Copyright © 2020-2023  润新知