shenyu自定义插件

2 篇文章 0 订阅

shenyu自定义插件

年初学习 soul 网关的时候,写了一系列入门文章。最近发现 soul 项目进入了 apache 孵化基金会,并且改名为shenyu。当时发现 shenyu 发了几个issue,我接了其中一个,由于当时正在迁移仓库到apache,加上我不熟悉插件开发流程,最后我花了2个月才完成这个任务。下面说下我完成issue的经历。

成为Contributor

平常可以关注下项目的issue列表,为了避免错过,可以订阅shenyu的开发邮件,订阅步骤如下:

  • 1.首先使用任意邮箱发送邮件到 :dev-subscribe@shenyu.apache.org (主题subscribe或者为空,内容也可为空)
  • 2.会收到来自dev-subscribe@shenyu.apache.org的confirm,再回复(内容为空即可)
  • 3.最后后收到Welcome的邮件,订阅成功

然后遇到有兴趣的issue,可以回复说自己有兴趣做,然后贡献代码,等待PR成功,就成为Contributors了。
贡献代码指南:https://dromara.org/zh/projects/soul/contributor/

接任务

回复issue,有指定任务权限的人看到会给你回复。我当时在4月接的任务,真正完成是在7月初了。
在这里插入图片描述

完成任务

接了任务之后,有不懂的,可以在issue里问,或者加shenyu的贡献者微信群,在里面提问。

我这个任务,很明显,就是添加一个可以修改response header的插件,当然后面做着做着,发现response body 也要支持自定义修改,这也是我任务完成时间过长的原因之一。

最后在大佬们的帮助下,我圆满完成了任务。

如何开发一个shenyu自定义插件

定义插件

1.在shenyu-plugin模块下新增一个子模块,例如我开发的是 shenyu-plugin-modify-response
在这里插入图片描述
2.新增插件,继承AbstractShenyuPlugin,重写doExecute、getOrder、named、skip等函数。
在这里插入图片描述

3.定义枚举
在PluginEnum类里,添加自定义插件的枚举。

//三个参数分别是  插件执行顺序、对应角色、插件名
MODIFY_RESPONSE(44, 0, "modifyResponse")

4.cache和handler包属于可选

定义插件starter

1.在 shenyu-spring-boot-starter 模块的子模块 shenyu-spring-boot-starter-plugin下新增子模块,例如我新增的是
shenyu-spring-boot-starter-plugin-modify-response
在这里插入图片描述
2.新增插件的 configuration

@Configuration
public class ModifyResponsePluginConfiguration {
    @Bean
    public ShenyuPlugin modifyResponsePlugin() {
        return new ModifyResponsePlugin();
    }
    @Bean
    public PluginDataHandler modifyResponsePluginDataHandler() {
        return new ModifyResponsePluginDataHandler();
    }
}

3.在 resources 目录下新增一个META-INF目录

4.新增 spring.factories 和 spring.provides 文件

这里利用的是Java的SPI机制。

spring.factories文件里的内容是configuration的全地址

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.shenyu.springboot.starter.plugin.modify.response.ModifyResponsePluginConfiguration

spring.provides文件里的内容是模块名

provides: shenyu-spring-boot-starter-plugin-modify-response

自定义插件使用

以上就是 shenyu 自定义插件的一般步骤了,主要的插件处理逻辑是在插件的 doExecute() 里。

如果你想要使用插件的话,要在 bootstrap 模块的 pom 文件里,加上依赖

<!-- shenyu modify response plugin start-->
        <dependency>
            <groupId>org.apache.shenyu</groupId>
            <artifactId>shenyu-spring-boot-starter-plugin-modify-response</artifactId>
            <version>${project.version}</version>
        </dependency>
<!-- shenyu modify response plugin end-->

然后在 admin 后台添加并开启插件(插件名记得和枚举里的名字一样),这样就能使用了。
在这里插入图片描述

tips

1.如果插件需要自定义参数,可以自己定义一个 handler 实现 RuleHandle(selector同理),具体类路径如下
在这里插入图片描述
当然这样就需要前端也配合修改。

如果是普通的参数,可以直接在 admin 的插件处理管理来新增参数。
在这里插入图片描述

2.新增的插件,需要把 sql(包括插件处理管理里的数据)语句同步到 schema.h2.sql 和 schema.sql 文件里。

3.开发完成,记得加上测试用例

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值