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

  • 相关阅读:
    IT经典书籍——Head First系列【推荐】
    IT经典书籍——Head First系列【推荐】
    使用JSP实现用户登录
    使用JSP实现用户登录
    【知乎精选】如何面试一个产品经理?如何判断一个产品经理是否是一个很牛的产品经理?
    淘宝API总结
    「用户标签」在数据库设计时应该如何存储?
    【爬虫集合】抖音API分析
    商业架构体系
    短视频带货
  • 原文地址:https://www.cnblogs.com/wangzhuxing/p/9738906.html
Copyright © 2011-2022 走看看