Spring Boot 中如何使用 Dubbo Activate 扩展点

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!

『 公司的核心竞争力在于创新 – 《启示录》 』

继续上一篇:《 Springboot 整合 Dubbo/ZooKeeper 》,在 Spring Boot 使用 Dubbo Activate 扩展点。这是一个群友问的,我总结下,分享给更多人。

本文提纲
一、什么是 Dubbo Activate 注解
二、使用 Dubbo Activate
三、小结

 

运行环境:JDK 7 或 8,Maven 3.0+
技术栈:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

 

一、什么是 Dubbo Activate 注解

@Activate 是一个 Duboo 框架提供的注解。在 Dubbo 官方文档上有记载:
对于集合类扩展点,比如:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker等, 可以同时加载多个实现,此时,可以用自动激活来简化配置。

 

用 @Activate 来实现一些 Filter ,可以具体如下:
1. 无条件自动激活
直接使用默认的注解即可


1

2

3

4

5

6

7

import com.alibaba.dubbo.common.extension.Activate;

import com.alibaba.dubbo.rpc.Filter;

  

@Activate // 无条件自动激活

public class XxxFilter implements Filter {

    // ...

}

 

2. 配置 xxx 参数,并且参数为有效值时激活,比如配了cache=”lru”,自动激活 CacheFilter


1

2

3

4

5

6

7

import com.alibaba.dubbo.common.extension.Activate;

import com.alibaba.dubbo.rpc.Filter;

  

@Activate("xxx") // 当配置了xxx参数,并且参数为有效值时激活,比如配了cache="lru",自动激活CacheFilter。

public class XxxFilter implements Filter {

    // ...

}

 

3. 只对提供方激活,group 可选 provider 或 consumer


1

2

3

4

5

6

7

8

import com.alibaba.dubbo.common.extension.Activate;

import com.alibaba.dubbo.rpc.Filter;

  

@Activate(group = "provider", value = "xxx")

// 只对提供方激活,group可选"provider"或"consumer"

public class XxxFilter implements Filter {

    // ...

}

 

二、使用 Dubbo Activate 注解

基于以前的 springboot-dubbo-server 和 springboot-dubbo-client 工程,GitHub 地址:https://github.com/JeffLi1993/springboot-learning-example 。

这里我们在消费端,既 springboot-dubbo-client 工程上添加一个 Filter。代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.xxx;

  

import com.alibaba.dubbo.rpc.Filter;

import com.alibaba.dubbo.rpc.Invoker;

import com.alibaba.dubbo.rpc.Invocation;

import com.alibaba.dubbo.rpc.Result;

import com.alibaba.dubbo.rpc.RpcException;

  

  

public class XxxFilter implements Filter {

    public Result invoke(Invoker<?> invoker,

Invocation invocation) throws RpcException {

        // before filter ...

        Result result = invoker.invoke(invocation);

        // after filter ...

        return result;

    }

}

 

启动 client 工程发现,Console 报错,出现:


1

Caused by: java.lang.IllegalStateException: No such extension dubboConsumerFilter for filter/com.alibaba.dubbo.rpc.Filter

发现这个 Filter 初始化时,报错了。证明没有配置成功。

 

原来根据官方文档中描述,我们需要配置扩展点配置文件。

在 META-INF 中配置:


1

xxx=com.xxx.XxxFilter

Maven 项目目录结构


1

2

3

4

5

6

7

8

9

10

src

 |-main

    |-java

        |-com

            |-xxx

                |-XxxFilter.java (实现Filter接口)

    |-resources

        |-META-INF

            |-dubbo

                |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter)

三、小结

调用拦截扩展的应用场景很多,比如黑白名单,比如 IP 等。

 

欢迎扫一扫我的公众号关注 — 及时得到博客订阅哦!
— http://www.bysocket.com/ —
— https://github.com/JeffLi1993 —

时间: 2024-09-16 07:19:30

Spring Boot 中如何使用 Dubbo Activate 扩展点的相关文章

springboot(十一):Spring boot中mongodb的使用

mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置漏洞被攻击,数据被删,引起了人们的注意,感兴趣的可以看看这篇文章:场屠戮MongoDB的盛宴反思:超33000个数据库遭遇入侵勒索,同时也说明了很多公司生产中大量使用mongodb. mongodb简介 MongoDB(来自于英文单词"Humongous",中文含义为"庞大&qu

《深入实践Spring Boot》一第2章 在Spring Boot中使用数据库2.1 使用MySQL

第2章 在Spring Boot中使用数据库 使用数据库是开发基本应用的基础.借助于开发框架,我们已经不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等诸如此类的被称作底层的代码,我们将在高级的层次上访问数据库.而Spring Boot更是突破了以前所有开发框架访问数据库的方法,在前所未有的更加高级的层次上访问数据库.因为Spring Boot包含一个功能强大的资源库,为使用Spring Boot的开发者提供了更加简便的接口进

springboot(三):Spring boot中Redis的使用

spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化.除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库.可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景.本文介绍Redis在Spring Boot中两个典型的应用场景. 如何使用 1.引入

Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发等.为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTf

spring boot(三):Spring Boot中Redis的使用

spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化.除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库.可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景.本文介绍Redis在Spring Boot中两个典型的应用场景. 如何使用 1.引入

Spring Boot中集成Spring Security 专题

if语句中条件判断就是检查当前的url请求是否是logout-url的配置值,接下来,获取用户的authentication,并循环调用处理器链中各个处理器的logout()函数,前面在parse阶段说过,处理器链中有两个实例,处理会话的SecurityContextLogoutHandler及remember-me服务,我们来一一看看它们的logout函数实现: 2.1.0 SecurityContextLogoutHandler public void logout(HttpServletR

Spring Boot中使用Actuator的/info端点输出Git版本信息

对于Spring Boot的Actuator模块相信大家已经不陌生了,尤其对于其中的/health./metrics等强大端点已经不陌生(如您还不了解Actuator模块,建议先阅读<Spring Boot Actuator监控端点小结>).但是,其中还有一个比较特殊的端点/info经常被大家所忽视,因为从最初的理解,它主要用来输出application.properties配置文件中通过info前缀来定义的一些属性,由于乍看之下可能想不到太多应用场景,只是被用来暴露一些应用的基本信息,而基本

【spring boot logback】spring boot中logback日志乱码问题

在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码.   控制台看到打印日志乱码如下:   而日志文件打开: 记事本打开 sublime打开     关于这个问题,分析如下: 1.打印的"进入Controller日志控制中心---->>>"字样可以看出,至少代码本身和IDE环境的编码方式没有任何的关系: 2.打印出来的日志是logback-spring.xml文件起作用之后,显示在控制台的,而日志文件

Spring Boot中使用MyBatis注解配置详解

MyBatis MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 传参方式 下面通过几种不同传参方式来实现前文中实现的插入操作. 使用@Param 在之前的整合示例中我们已经使用了这种最简单的传参方式,如下: @I