如何快速开发Shenyu网关插件5步掌握插件开发脚手架【免费下载链接】shenyuShenyu是一个基于Spring Cloud的API网关主要用于微服务架构中的API管理和流量控制。它的特点是易用性高、灵活性强、性能稳定等。适用于API管理和流量控制场景。项目地址: https://gitcode.com/gh_mirrors/she/shenyuShenyu网关插件开发是构建高性能API网关的关键技能通过Shenyu插件开发脚手架开发者可以快速创建自定义插件实现流量控制、安全认证、日志记录等核心功能。本文将详细介绍Shenyu插件开发脚手架的使用方法帮助您快速上手插件开发。 Shenyu插件架构概览Shenyu网关采用插件化架构设计每个插件都是一个独立的处理单元。核心接口ShenyuPlugin定义了插件的基本行为而AbstractShenyuPlugin抽象类则提供了插件开发的脚手架。核心文件位置shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.javashenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java 5步快速创建Shenyu插件第1步创建插件项目结构创建一个标准的Maven项目添加必要的依赖dependency groupIdorg.apache.shenyu/groupId artifactIdshenyu-plugin-api/artifactId version${shenyu.version}/version /dependency dependency groupIdorg.apache.shenyu/groupId artifactIdshenyu-plugin-base/artifactId version${shenyu.version}/version /dependency第2步继承AbstractShenyuPlugin创建您的插件类继承AbstractShenyuPlugin抽象类import org.apache.shenyu.plugin.base.AbstractShenyuPlugin; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; public class CustomPlugin extends AbstractShenyuPlugin { Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { // 在这里实现您的业务逻辑 return chain.execute(exchange); } Override public int getOrder() { return 0; // 设置插件执行顺序 } Override public String named() { return custom-plugin; // 插件名称 } }第3步实现插件核心逻辑在doExecute方法中实现您的业务逻辑。Shenyu插件开发脚手架提供了完整的上下文信息ServerWebExchange: Spring WebFlux的请求响应上下文SelectorData: 选择器数据用于路由匹配RuleData: 规则数据包含具体的处理规则第4步配置插件元数据在resources/META-INF/shenyu目录下创建plugin.yaml文件name: custom-plugin configClazz: com.example.CustomPluginConfig第5步注册插件到Shenyu网关通过Spring配置将插件注册到网关Configuration public class PluginConfiguration { Bean public ShenyuPlugin customPlugin() { return new CustomPlugin(); } } 插件开发脚手架核心功能1. 插件生命周期管理Shenyu插件开发脚手架提供了完整的生命周期管理// 插件执行前调用 Override public void before(ServerWebExchange exchange) { super.before(exchange); // 自定义前置处理 } // 插件执行后调用 Override public void after(ServerWebExchange exchange) { super.after(exchange); // 自定义后置处理 }2. 条件跳过机制利用脚手架提供的跳过机制灵活控制插件执行Override public boolean skip(ServerWebExchange exchange) { // 根据条件跳过插件执行 return exchange.getRequest().getPath().value().startsWith(/api/v1); }3. 缓存配置管理脚手架内置了选择器和规则匹配的缓存机制// 自动初始化缓存配置 initCacheConfig(); // 获取插件数据 PluginData pluginData BaseDataCache.getInstance().obtainPluginData(pluginName); 实际案例限流插件开发让我们以限流插件为例展示如何使用Shenyu插件开发脚手架public class RateLimitPlugin extends AbstractShenyuPlugin { private final RateLimiter rateLimiter; public RateLimitPlugin() { this.rateLimiter RateLimiter.create(100); // 每秒100个请求 } Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { if (!rateLimiter.tryAcquire()) { exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS); return exchange.getResponse().setComplete(); } return chain.execute(exchange); } Override public int getOrder() { return 10; } Override public String named() { return rate-limit; } } 插件开发最佳实践1.合理设置插件顺序插件执行顺序至关重要建议认证类插件order 0-10安全类插件order 11-20路由类插件order 21-30日志类插件order 31-402.充分利用缓存机制Shenyu插件开发脚手架内置了高效的缓存系统选择器匹配缓存规则匹配缓存插件数据缓存3.错误处理策略Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { try { // 业务逻辑 return chain.execute(exchange); } catch (Exception e) { LOG.error(插件执行异常, e); exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); return exchange.getResponse().setComplete(); } } 调试与测试单元测试模板ExtendWith(MockitoExtension.class) class CustomPluginTest { Mock private ServerWebExchange exchange; Mock private ShenyuPluginChain chain; private CustomPlugin plugin; BeforeEach void setUp() { plugin new CustomPlugin(); } Test void testPluginExecution() { // 测试逻辑 } }集成测试参考现有插件测试示例shenyu-plugin-ratelimiter测试shenyu-plugin-sentinel测试 快速部署与验证1. 打包插件mvn clean package2. 部署到Shenyu网关将生成的JAR包放到Shenyu网关的插件目录或通过插件热部署机制加载。3. 验证插件功能通过Shenyu Admin控制台或直接调用API验证插件功能。 高级技巧与优化建议性能优化异步处理充分利用Reactor的异步特性缓存预热在插件初始化时预加载必要数据连接池管理合理管理外部服务连接可观测性指标收集集成Micrometer收集插件指标链路追踪支持分布式追踪系统日志分级合理设置日志级别避免性能影响 总结Shenyu插件开发脚手架为开发者提供了完整的插件开发框架通过5个简单步骤即可快速创建功能强大的网关插件。无论是简单的请求处理还是复杂的业务逻辑Shenyu的插件化架构都能提供灵活、高效的解决方案。核心优势✅ 完整的生命周期管理✅ 内置缓存和匹配机制✅ 灵活的跳过和条件执行✅ 丰富的扩展点和钩子函数✅ 与Spring生态完美集成现在就开始使用Shenyu插件开发脚手架快速构建您的自定义网关插件吧图Shenyu网关插件架构示意图【免费下载链接】shenyuShenyu是一个基于Spring Cloud的API网关主要用于微服务架构中的API管理和流量控制。它的特点是易用性高、灵活性强、性能稳定等。适用于API管理和流量控制场景。项目地址: https://gitcode.com/gh_mirrors/she/shenyu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
如何快速开发Shenyu网关插件:5步掌握插件开发脚手架
如何快速开发Shenyu网关插件5步掌握插件开发脚手架【免费下载链接】shenyuShenyu是一个基于Spring Cloud的API网关主要用于微服务架构中的API管理和流量控制。它的特点是易用性高、灵活性强、性能稳定等。适用于API管理和流量控制场景。项目地址: https://gitcode.com/gh_mirrors/she/shenyuShenyu网关插件开发是构建高性能API网关的关键技能通过Shenyu插件开发脚手架开发者可以快速创建自定义插件实现流量控制、安全认证、日志记录等核心功能。本文将详细介绍Shenyu插件开发脚手架的使用方法帮助您快速上手插件开发。 Shenyu插件架构概览Shenyu网关采用插件化架构设计每个插件都是一个独立的处理单元。核心接口ShenyuPlugin定义了插件的基本行为而AbstractShenyuPlugin抽象类则提供了插件开发的脚手架。核心文件位置shenyu-plugin-api/src/main/java/org/apache/shenyu/plugin/api/ShenyuPlugin.javashenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/AbstractShenyuPlugin.java 5步快速创建Shenyu插件第1步创建插件项目结构创建一个标准的Maven项目添加必要的依赖dependency groupIdorg.apache.shenyu/groupId artifactIdshenyu-plugin-api/artifactId version${shenyu.version}/version /dependency dependency groupIdorg.apache.shenyu/groupId artifactIdshenyu-plugin-base/artifactId version${shenyu.version}/version /dependency第2步继承AbstractShenyuPlugin创建您的插件类继承AbstractShenyuPlugin抽象类import org.apache.shenyu.plugin.base.AbstractShenyuPlugin; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; public class CustomPlugin extends AbstractShenyuPlugin { Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { // 在这里实现您的业务逻辑 return chain.execute(exchange); } Override public int getOrder() { return 0; // 设置插件执行顺序 } Override public String named() { return custom-plugin; // 插件名称 } }第3步实现插件核心逻辑在doExecute方法中实现您的业务逻辑。Shenyu插件开发脚手架提供了完整的上下文信息ServerWebExchange: Spring WebFlux的请求响应上下文SelectorData: 选择器数据用于路由匹配RuleData: 规则数据包含具体的处理规则第4步配置插件元数据在resources/META-INF/shenyu目录下创建plugin.yaml文件name: custom-plugin configClazz: com.example.CustomPluginConfig第5步注册插件到Shenyu网关通过Spring配置将插件注册到网关Configuration public class PluginConfiguration { Bean public ShenyuPlugin customPlugin() { return new CustomPlugin(); } } 插件开发脚手架核心功能1. 插件生命周期管理Shenyu插件开发脚手架提供了完整的生命周期管理// 插件执行前调用 Override public void before(ServerWebExchange exchange) { super.before(exchange); // 自定义前置处理 } // 插件执行后调用 Override public void after(ServerWebExchange exchange) { super.after(exchange); // 自定义后置处理 }2. 条件跳过机制利用脚手架提供的跳过机制灵活控制插件执行Override public boolean skip(ServerWebExchange exchange) { // 根据条件跳过插件执行 return exchange.getRequest().getPath().value().startsWith(/api/v1); }3. 缓存配置管理脚手架内置了选择器和规则匹配的缓存机制// 自动初始化缓存配置 initCacheConfig(); // 获取插件数据 PluginData pluginData BaseDataCache.getInstance().obtainPluginData(pluginName); 实际案例限流插件开发让我们以限流插件为例展示如何使用Shenyu插件开发脚手架public class RateLimitPlugin extends AbstractShenyuPlugin { private final RateLimiter rateLimiter; public RateLimitPlugin() { this.rateLimiter RateLimiter.create(100); // 每秒100个请求 } Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { if (!rateLimiter.tryAcquire()) { exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS); return exchange.getResponse().setComplete(); } return chain.execute(exchange); } Override public int getOrder() { return 10; } Override public String named() { return rate-limit; } } 插件开发最佳实践1.合理设置插件顺序插件执行顺序至关重要建议认证类插件order 0-10安全类插件order 11-20路由类插件order 21-30日志类插件order 31-402.充分利用缓存机制Shenyu插件开发脚手架内置了高效的缓存系统选择器匹配缓存规则匹配缓存插件数据缓存3.错误处理策略Override protected MonoVoid doExecute(ServerWebExchange exchange, ShenyuPluginChain chain, SelectorData selector, RuleData rule) { try { // 业务逻辑 return chain.execute(exchange); } catch (Exception e) { LOG.error(插件执行异常, e); exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); return exchange.getResponse().setComplete(); } } 调试与测试单元测试模板ExtendWith(MockitoExtension.class) class CustomPluginTest { Mock private ServerWebExchange exchange; Mock private ShenyuPluginChain chain; private CustomPlugin plugin; BeforeEach void setUp() { plugin new CustomPlugin(); } Test void testPluginExecution() { // 测试逻辑 } }集成测试参考现有插件测试示例shenyu-plugin-ratelimiter测试shenyu-plugin-sentinel测试 快速部署与验证1. 打包插件mvn clean package2. 部署到Shenyu网关将生成的JAR包放到Shenyu网关的插件目录或通过插件热部署机制加载。3. 验证插件功能通过Shenyu Admin控制台或直接调用API验证插件功能。 高级技巧与优化建议性能优化异步处理充分利用Reactor的异步特性缓存预热在插件初始化时预加载必要数据连接池管理合理管理外部服务连接可观测性指标收集集成Micrometer收集插件指标链路追踪支持分布式追踪系统日志分级合理设置日志级别避免性能影响 总结Shenyu插件开发脚手架为开发者提供了完整的插件开发框架通过5个简单步骤即可快速创建功能强大的网关插件。无论是简单的请求处理还是复杂的业务逻辑Shenyu的插件化架构都能提供灵活、高效的解决方案。核心优势✅ 完整的生命周期管理✅ 内置缓存和匹配机制✅ 灵活的跳过和条件执行✅ 丰富的扩展点和钩子函数✅ 与Spring生态完美集成现在就开始使用Shenyu插件开发脚手架快速构建您的自定义网关插件吧图Shenyu网关插件架构示意图【免费下载链接】shenyuShenyu是一个基于Spring Cloud的API网关主要用于微服务架构中的API管理和流量控制。它的特点是易用性高、灵活性强、性能稳定等。适用于API管理和流量控制场景。项目地址: https://gitcode.com/gh_mirrors/she/shenyu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考