Apache ShenYu 发布 2.5.0

前言

时隔 4 个月,Apache ShenYu 迎来 2.5.0 的大版本,本次版本内容,共有 300 + 的 pull Request,60 + 的贡献者参与提交,88000 + 的添加或者修改的代码行数,该版本优化许多内容,让我们看下这个版本都做了什么。以下只是列举比较重要的一些功能。

日志功能

  • 新增对接阿里云SLS日志插件

具体使用参考:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-aliyun-sls/

  • 新增对接Elastic Search日志插件

具体使用参考:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-elasticsearch

  • 新增对接Apache RocketMQ日志插件

具体使用参考:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-rocketmq

  • 新增对接Apache Kafka日志插件

具体使用参考:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-kafka

新功能

新增 mock 插件。

为请求指定响应状态码和响应体方便进行测试。 支持设置请求的响应状态码和响应体。 支持配置 ${int|min-max} , ${double|min-max|format} , ${email} , ${phone} , ${zh|min-max} , ${list|[arg1,arg2...]} , ${array|item|length} 等占位符自动生成数据。

具体使用参考:https://shenyu.apache.org/zh/docs/plugin-center/mock/mock-plugin

用户也可以自定义开发其他占位符:

具体开发:https://shenyu.apache.org/zh/docs/developer/spi/custom-mock-generator

response 插件中自定义输出结果

ShenYu代码 :

@Bean
    public ShenyuPlugin responsePlugin(final ObjectProvider<List<MessageWriter>> httpWriter) {
        Map<String, MessageWriter> writerMap = new LinkedHashMap<>();
        List<MessageWriter> writerList = httpWriter.getIfAvailable(ArrayList::new);
        for (MessageWriter writer : writerList) {
            List<String> supportTypes = writer.supportTypes();
            for (String type : supportTypes) {
                writerMap.put(type, writer);
            }
        }
        return new ResponsePlugin(writerMap);
    }

用户自定实现 :rg.apache.shenyu.plugin.response.strategy.MessageWriter

/**
 * The interface Message writer.
 */
public interface MessageWriter {

    /**
     * Write with exchange and shenyu plugin chain.
     *
     * @param exchange exchange the current server exchange
     * @param chain provides a way to delegate to the next filter
     * @return {@code Mono<Void>} to indicate when request processing is complete
     */
    Mono<Void> writeWith(ServerWebExchange exchange, ShenyuPluginChain chain);

    /**
     * Support type list.
     *
     * @return the list
     */
    List<String> supportTypes();
}

注册中心

ShenYu的注册中心的目的是将网关的实例暴露出去,以便支持ShenYu的集群功能。可以使用shenyu-nginx项目,也可以对接其他的负载均衡服务。

ShenYu-Nginx:https://github.com/apache/shenyu-nginx

新增 Nacos的支持

使用: 在网关bootstarp的yaml新增如下配置:

shenyu :
  instance:
    enabled: true //设置true表示打开
    registerType: nacos //类型为nacos
    serverLists: localhost:8848
    props:

新增 Consul的支持

使用: 在网关bootstarp的yaml新增如下配置:

shenyu :
  instance:
    enabled: true //设置true表示打开
    registerType: consul //类型为consul
    serverLists: localhost:2379
    props:

性能优化

  • 升级SpringBoot 到 2.6.8, 同时将Reactor-netty升级到 1.0.19

  • 网关自定义Netty全量参数配置。满足用户的个性化配置

具体可以参考:https://shenyu.apache.org/zh/docs/user-guide/property-config/gateway-property-config

新增匹配缓存策略。流量匹配效率为 O(1)

如何使用? 在网关的yaml文件中进行配置:

shenyu:
  matchCache:
    enabled: true //设置为true 开启
    maxFreeMemory: 256 # //内存大小 单位M

新增自定义线共享线程池。

如何使用? 在网关的yaml文件中进行配置:

shenyu:
 sharedPool:
   enable: true
   prefix: "shenyu-shared"
   corePoolSize: 200
   maximumPoolSize: 2000
   keepAliveTime: 60000
   maxWorkQueueMemory: 1073741824 # 1GB
   maxFreeMemory: 268435456 # 256MB

原理:自定义shenyu线程池,重写队列等等。具体可以查看如下代码:

image.png

管控平台

  • 数据存储新增支持 oracle 数据库。
  • 新增API文档管理功能。
  • ShenYu Admin管理控制台新增日志记录。
  • 更多....

重构

  • 重构 spring cloud插件负载均衡。

  • 重构 IpUtils 获取 ip逻辑 。

  • Zookeeper 客户端替换成 Apache Curator。

  • 重构ShenYu Java Client注册逻辑。

  • 更多....

BugFix

  • 修复 divide插件空指针异常.
  • 修复 body 体过大的异常。
  • 修复 Java客户端注册,循环错误。
  • 修复 Grpc客户端注册错误。
  • 修复 加载本地插件失败的问题。
  • 修复 Consul注册只注册1个元数据的问题。
  • 修复 使用Websocket同步数据时候的 CSRF攻击。
  • 修复 Admin pg脚本错误。
  • 更多....

贡献者

特别感谢对 2.5.0 的支持的贡献者,排名不分顺序。

dragon-zhang,renzhuyan,moremind,xiaoyu,likeguo,qinghai777,Kevin, Qicz,,yunlongn,lianjunwei,zhengpeng,Han,weihubeats,Zihao, DamonXue(Fibonacci),Luke.Z,ShawnSiao,sunshujie1990,Codd,dayu, LiuTianyou,PJ,Sixh-PrFor,ChineseTony,chuang,erdengk,hutaishi,impactCn, Jiageng,lahmxu,qifanyyy,Shawn,SongTao,zouchangfu,damonxue,Kunshuai, mango,nuo-promise,Salted,Seth,SongTaoZhuang,wklong,AhahaGe,Bigbang, Chencheng,Dongx,Ethan,haibo.duan,Haitao,huanccwang,jerbo99,Lidyaqf Liming,midnight2104,Nick-fengzl,ningminglong,Rubén,Shuaiqi,vijay wjlonger,Zhang,zhc,Zhiqiang,ZZQ

关于Apache ShenYu

image.png

Apache ShenYu 一款使用 Java Reactor 开发的响应式 API 网关。以其高性能,动态灵活的流量管控,热插拔,易部署等特性,开箱即用为用户提供整套全生命周期的 API 网关,包含 API 注册、服务代理、协议转换与 API 治理等功能。于2022年7月毕业成为Apache顶级项目。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/208574/apache-shenyu-2-5-0-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。