首页 > 其他分享 >Dubbo自定义扩展Filter

Dubbo自定义扩展Filter

时间:2024-11-18 10:50:24浏览次数:3  
标签:Dubbo 自定义 dubbo Filter rpc AppendedFilter apache org

Filter

在 RPC框架 - Filter请求拦截 一节中,我们了解了 Filter 的工作机制,以及 Dubbo 框架提供的一些内置 Filter 实现。在本文中,我们来了解如何扩展自定义的过滤器实现:一个可以对返回的结果进行统一的处理、验证等统一 Filter 处理器,减少对开发人员的打扰。

本示例的完整源码请参见 dubbo-samples-extensibility。除了本示例之外,Dubbo 核心仓库 apache/dubbo 以及扩展库 apache/dubbo-spi-extensions 中的众多 Filter 实现,都可以作为扩展参考实现。

任务详情

对所有调用Provider服务的请求在返回的结果的后面统一添加's customized AppendedFilter

实现方式

在Provider中自定义一个Filter,在Filter中修改返回结果。

代码结构
src
 |-main
    |-java
        |-org
            |-apache
                |-dubbo
                    |-samples
                        |-extensibility
                            |-filter
                                |-provider
                                    |-AppendedFilter.java (实现Filter接口)
    |-resources
        |-META-INF
            |-application.properties (Dubbo Provider配置文件)
            |-dubbo
                |-org.apache.dubbo.rpc.Filter (纯文本文件)
代码详情
package org.apache.dubbo.samples.extensibility.filter.provider;

import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.AsyncRpcResult;

public class AppendedFilter implements Filter {

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Result result= invoker.invoke(invocation);
        // Obtain the returned value
        Result appResponse = ((AsyncRpcResult) result).getAppResponse();
        // Appended value
        appResponse.setValue(appResponse.getValue()+"'s customized AppendedFilter");
        return result;
    }
}
SPI配置

resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter文件中添加如下配置:

appended=org.apache.dubbo.samples.extensibility.filter.provider.AppendedFilter
配置文件

resources/application.properties文件中添加如下配置,激活刚才的自定义 Filter 实现:

# Apply AppendedFilter
dubbo.provider.filter=appended
注意

除了通过配置激活 Filter 实现之外,还可以通过为实现类增加 @Activate 注解,以在满足某些条件时自动激活 Filter 实现,如:

@Activate(group="provider")
public class AppendedFilter implements Filter {}

这个 Filter 实现将在 Provider 提供者端自动被激活。

运行结果

使用本地IDE的方式来运行任务,结果如下:

标签:Dubbo,自定义,dubbo,Filter,rpc,AppendedFilter,apache,org
From: https://blog.csdn.net/qq_36070104/article/details/143818316

相关文章

  • SpringBoot(二十六)SpringBoot自定义注解
    注解在springboot日常开发中使用的频率是很高的,官方为我们提供了很多注解,比如:@Autowired、@GetMapping等……但是我们有些特定的需求官方提供的注解是没有的。我们可以自定义注解。下面我们来了解一下自定义注解的过程。一:元注解Java为我们提供了几个元注解来自定义注解......
  • 2024-11-17 uniapp小程序之自定义 · 全局弹窗
    效果图:目录结构: 共需要修改6个地方,开始前请安装一个依赖:vue-inset-loadernpmivue-inset-loadervue-inset-loader的GitHub地址:https://github.com/1977474741/vue-inset-loader一:新建弹窗文件components/golbalModa.vue<template><viewclass="modal"v-if="globa......
  • 【预训练-微调】迁移学习项目实战自定义数据集宝可梦精灵-学习笔记
    本学习笔记来源于B站:深度学习—迁移学习项目实战自定义数据集宝可梦精灵。在本预训练-微调代码中,重点要学习的内容包括:加载官方提供的经典网络架构resnet18和已经训练好的模型,对最后一层全连接层进行修改,改为适合自己任务的网络架构。在此基础上,训练最后一层全连接层,并保存最......
  • 字节跳动出大招!IconPark图标库,自定义图标,好用到停不下来!
    大家好,欢迎来到程序视点!我是小二哥!在项目开发过程中,图标是永远绕不开的话题。今天就和大家来聊一聊~图标库现状问题图标数量少难以满足产品项目需求的,或遇到缺失图标的,往往还是需要设计师按所选图标的风格自己绘制。主要以单色的图标为主在日渐繁荣(要求越来......
  • 【C++】深入理解自定义 list 容器中的 list_iterator:迭代器实现详解
    个人主页:起名字真南的CSDN博客个人专栏:【数据结构初阶】......
  • (12-3-01)使用YOLOv8识别检测交通标志:基于YOLOv8的交通标志检测模型(1)使用自定义交通标志
    1.5 基于YOLOv8的交通标志检测模型本节的内容主要介绍了基于YOLOv8的交通标志检测模型的构建与训练过程。首先,使用YOLOv8的预训练模型,并通过定制的数据集对其进行了训练,以检测交通标志。在训练过程中,评估了不同的参数和优化器的影响,通过调整批量大小、学习率等参数来优化模......
  • bloompy库的CountingBloomFilter使用说明及示例
    1、使用说明: HelponclassCountingBloomFilterinmodulebloompy:classCountingBloomFilter(BloomFilter) | CountingBloomFilter(error_rate=0.001,element_num=10000,bit_num=None) |  | Methodresolutionorder: |   CountingBloomFilter ......
  • thinkphp6 使用自定义命令,生成数据库视图
    在ThinkPHP命令行工具中,你可以为选项设置别名,通过为选项指定一个简短的别名来简化命令输入。例如,如果你希望--force-recreate选项有一个简短的别名-f,你可以通过在addOption方法中设置第二个参数来实现这一点。示例:为选项设置别名在addOption方法的第二个参数中设置别......
  • 大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 了 拦截器实现 Java
    点一下关注吧!!!非常感谢!!持续更新!!!Java篇开始了!目前开始更新MyBatis,一起深入浅出!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(......
  • 鸿蒙NEXT自定义组件:太极Loading
     【引言】(完整代码在最后面)本文将介绍如何在鸿蒙NEXT中创建一个自定义的“太极Loading”组件,为你的应用增添独特的视觉效果。【环境准备】电脑系统:windows10开发工具:DevEcoStudioNEXTBeta1BuildVersion:5.0.3.806工程版本:API12真机:mate60pro语言:ArkTS、ArkUI......