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

原文地址:https://www.cnblogs.com/wangzhuxing/p/9738906.html

时间: 2024-08-01 14:04:31

dubbo系列六、SPI扩展Filter隐式传参的相关文章

C#进阶系列——WebApi 接口参数不再困惑:传参详解

C#进阶系列--WebApi 接口参数不再困惑:传参详解

WebFlux系列(九)WebClient Uri列表、数组传参

#Java#Spring#WebFlux#Reactor#WebClient#Uri#传参#数组#列表# WebClient Uri列表.数组传参 视频讲解:  https://www.bilibili.com/video/av83351261/ 服务端: @RestController class EmployeeController { @GetMapping("employee") public Mono<String> requestList(@RequestPar

代理扩展-隐式代理和多播代理

代理这东西,真的不想再谈了,估计是个iOS开发人员都能熟练使用,跟Notification和Block一样,都用的滚瓜烂熟了. 这里小小的谈论一下代理的扩展:隐式代理和多播代理,其实非常简单. 隐式代理:就是定义协议的属性时不用再遵守协议了,实现方法的类也不用在遵守协议了,因为协议方法定义在NSObject的分类中. 直接上代码吧,真的是十分的简单: 1.Person类的头文件: 1 #import <Foundation/Foundation.h> 2 3 /** 4 NSObject的一个

初识Dubbo 系列之5-Dubbo 成熟度

成熟度 功能成熟度 Feature特征 Maturity成熟度 Strength强度 Problem问题 Advise建议 User用户 并发控制 Tested 并发控制   试用   连接控制 Tested 连接数控制   试用   直连提供者 Tested 点对点直连服务提供方,用于測试   測试环境使用 Alibaba 分组聚合 Tested 分组聚合返回值,用于菜单聚合等服务 特殊场景使用 可用于生产环境   參数验证 Tested 參数验证.JSR303验证框架集成 对性能有影响 试用

位移 隐式类型转换小解

例一: int main() { unsigned char a = 0xa5; unsigned char b = ~a >> 1+2+3; printf("b = %d\n",b); } 问b的值是多少? 这里b = 253; 老师说是先按位移再取反,说取反是和右加加一样的后置运算(本人新手不懂,~的运算级不是高些么): 1010 0101 >> 6 得 0000 0010 再取反 1111 1101(253) 小M看汇编代码得出的结果是这样的 1010 0

Dubbo中SPI扩展机制解析

dubbo的SPI机制类似与Java的SPI,Java的SPI会一次性的实例化所有扩展点的实现,有点显得浪费资源. dubbo的扩展机制可以方便的获取某一个想要的扩展实现,每个实现都有自己的name,可以通过name找到具体的实现. 每个扩展点都有一个@Adaptive实例,用来注入到依赖这个扩展点的某些类中,运行时通过url参数去动态判断最终选择哪个Extension实例用. dubbo的SPI扩展机制增加了对扩展点自动装配(类似IOC)和自动包装(类似AOP)的支持. 标注了@Activat

理解 Dubbo SPI 扩展机制

写在前面 最近接触了 gRPC 体会到虽然众多 RPC 框架各有各的特点但是他们提供的特性和功能有很多的相似之处 , 这就说明他们面对同样的分布式系统带来的问题.从 2016 年左右开始接触到 dubbo ,基本停留在使用的层面,对 dubbo 的设计以及着重要解决的问题都没有系统的研究过,通过对 dubbo 和其他类似 RPC 产品的系统学习 ,学习分布式系统中面临的共同问题以及解决之道. 微内核架构 微内核架构 (Microkernel architecture) 模式也被称为插件架构 (P

1.扩展方法2.接口的隐式实现和显式实现

1.扩展方法:必须写在一个静态类里面,具体见代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             Student s = new Stud

【C++自我精讲】基础系列五 隐式转换和显示转换

0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐式转换 定义:隐式转换是系统跟据程序的需要而自动转换的. 1)C++类型(char,int,float,long,double等)的隐式转换: 算术表达式隐式转换顺序为: 1.char - int - long - double 2.float - double //1)算术表达式 int m = 10; double n = m;//n = 10