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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM