Skip to main content

One post tagged with "apache shenyu"

View All Tags

【与ShenYu共创未来】

· One min read

个人介绍#

大家好,我是张乐,github-id: kerwin612,非常感谢Apache ShenYu社区对我的认可,让我有幸成为这个杰出开源项目的Committer。在此,我想与大家分享我参与Apache ShenYu项目的经历,以及我从中获得的成长和一些建议。

初识Apache ShenYu#

与Apache ShenYu的缘分始于我在公司网关技术选型时的探索。当时,我了解到Apache ShenYu这一项目,它不仅拥有高性能、多协议、易扩展的特性,还提供了丰富的开箱即用的插件,让我对其产生了浓厚的兴趣。于是,我决定深入探索,并在本地环境中成功运行了ShenYu的dev版本。

我的开源之路#

作为一名全栈工程师,我对前后端技术都有一定的了解,这也使我能够更全面地理解和体验ShenYu。在试用过程中,我发现了许多可以优化的地方,于是我决定动手解决这些问题。我给自己列了一个任务清单,逐一解决了这些问题,并将我的改进提交给了社区。

在前端方面,我主要进行了以下优化:

  • 我仔细检查了全站的样式,发现并修复了多处样式异常。这些异常虽然看似微小,但却直接影响着用户的视觉体验。通过修复这些异常,我使得ShenYu的前端界面更加整洁、美观,提升了用户的使用体验。

  • 我新增了多处体验优化。这些优化可能是一个按钮的位置调整,也可能是一个界面的交互逻辑改进。通过这些优化,我使得ShenYu的前端界面更加符合用户的使用习惯,显著提升用户的使用便捷性。

  • 我还积极处理了二十来个与前端相关的issue。这些issue有的是用户在使用过程中遇到的问题,有的是社区成员提出的改进建议。我仔细分析了每个issue的原因,并成功解决了这些issue,为ShenYu的前端稳定性做出了贡献。

在后端方面,我的贡献主要集中在以下几个方面:

  • 我处理了十来个与后端相关的issue。这些issue有的是bug修复,有的是功能增强。我通过查阅文档、调试代码、最后由项目管理员提供意见,逐一解决了这些问题。

  • 我新增了一个isBlank条件判断功能。这个功能可以方便地判断一个请求是否包含某个参数,为后端的逻辑处理提供了便利。

  • 我还新增了一个插件basic-auth。这个插件可以实现基本的认证授权功能,通过与其他社区成员的协作,我成功完成了这个插件的开发和测试工作,并将其集成到了ShenYu中。

我在Apahce ShenYu社区的体验#

随着我提交的PR越来越多,我也逐渐深入到了Apache ShenYu社区的核心。在这里,我感受到了社区成员们的热情和开放,他们总是乐于分享知识和经验,帮助我更好地了解和使用ShenYu。经过一段时间的努力和积累,我收到了ShenYu社区的邀请,正式成为了这个优秀团队的Committer。

成为Apache Committer对我来说不仅是一种荣誉,更是一种责任和担当。这代表了社区对我的信任和认可,也让我更加坚定了为社区做出贡献的决心。我深知,成为Committer只是一个新的起点,在未来的日子里,我将继续参与ShenYu的优化和发展工作,不断提升自己的技能和能力。我将继续关注社区的动态和需求,积极参与社区的活动和讨论,为ShenYu的发展贡献更多的力量。

此外,我也计划进一步深入学习Apache ShenYu的技术细节和架构原理,以便更好地为社区提供技术支持和解决方案。我相信,通过不断的学习和实践,我能够成为一名更加优秀的Committer,为Apache ShenYu的发展做出更大的贡献。

最后,我要感谢Apache ShenYu社区给予我的机会和信任,也感谢所有社区成员们的支持和帮助。我相信,在我们共同的努力下,Apache ShenYu一定会越来越好!

谢谢大家!

【Apache ShenYu 2.6.0 版本发布】

· One min read

关于Apache ShenYu#

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

官网: https://shenyu.apache.org GitHub: https://github.com/apache/shenyu

版本预览#

时隔半年,Apache ShenYu发布了2.6.0版本,该版本共计提交了280+个 Pull Request,新增约20+个新特性,新增了若干增强,重构了若干功能,并且修复了若干个bug。共计78位贡献者参与其中,累计贡献者达350+位。

版本记录:https://github.com/apache/shenyu/compare/v2.5.1...v2.6.0

新特性#

1.支持插件上传功能,支持网关热加载插件

具体使用请查看:https://shenyu.apache.org/zh/docs/next/developer/custom-plugin

具体pr请查看:https://github.com/apache/shenyu/pull/4392

2.支持使用Apollo作为数据同步和注册中心

sheneyu:  sync:    apollo:      appId: shenyu      meta: http://localhost:8080      env: dev      clusterName: test      namespace: application

具体pr请查看:https://github.com/apache/shenyu/pull/4532

3.支持springboot client在shenyu client中动态配置

4.添加TCP插件

具体使用请查看:https://shenyu.apache.org/zh/docs/next/plugin-center/proxy/tcp-plugin

具体pr请查看:https://github.com/apache/shenyu/pull/4607

https://github.com/apache/shenyu/pull/4766

5.支持springmvn(boot)在shenyu client中收集api-meta data

具体pr请查看:https://github.com/apache/shenyu/pull/4600

6.添加shenyu ingress controller的支持

具体使用请查看:https://shenyu.apache.org/zh/docs/user-guide/kubernetes-controller/build-deploy

https://shenyu.apache.org/zh/docs/user-guide/kubernetes-controller/config

具体pr请查看:https://github.com/apache/shenyu/pull/4620

配置如下:

shenyu:  netty:    http:      sni:        enabled: true        mod: k8s #k8s模式适用        defaultK8sSecretNamespace: shenyu-ingress #默认secret资源的namespace        defaultK8sSecretName: default-cert #默认secret资源名字

7.添加zookeeper,naocs,apollo,HttpLongPolling,consul作为shenyu服务发现

具体pr请查看:https://github.com/apache/shenyu/pull/4636

https://github.com/apache/shenyu/pull/4657

https://github.com/apache/shenyu/pull/4802

https://github.com/apache/shenyu/pull/4795

https://github.com/apache/shenyu/pull/4800

https://github.com/apache/shenyu/issues/4562

8.添加华为云lts日志收集

具体pr请查看:https://github.com/apache/shenyu/pull/4812

9.添加opengauss数据库支持

具体pr请查看:https://github.com/apache/shenyu/pull/4856

10.添加polaris作为shenyu的数据同步和注册中心

shenyu:  sync:    polaris:      url: 127.0.0.1:8093      namespace:      fileGroup:

具体pr请查看:https://github.com/apache/shenyu/pull/4410

https://github.com/apache/shenyu/pull/4897

11.添加shenyu匹配缓存

shenyu:  selectorMatchCache:    ## selector L1 cache    cache:      enabled: false      initialCapacity: 10000 # initial capacity in cache      maximumSize: 10000 # max size in cache    ## selector L2 cache, use trie as L2 cache    trie:      enabled: false      cacheSize: 128 # the number of plug-ins      matchMode: antPathMatch  ruleMatchCache:    ## rule L1 cache    cache:      enabled: true      initialCapacity: 10000 # initial capacity in cache      maximumSize: 65536 # max size in cache    ## rule L2 cache, use trie as L2 cache    trie:      enabled: false      cacheSize: 1024 # the number of selectors      matchMode: antPathMatch

具体使用请查看:https://shenyu.apache.org/zh/docs/next/user-guide/property-config/client-property-config

具体pr请查看:https://github.com/apache/shenyu/pull/4417

https://github.com/apache/shenyu/pull/4536

12.新增shenyu admin对prometheus的支持

具体pr请查看:https://github.com/apache/shenyu/pull/4336

13.暴露shenyu actuator端点

说明:可通过pr查看shenyu网关的内存数据

具体pr请查看:https://github.com/apache/shenyu/pull/4637

如何关闭请查看actuator配置:

management:  endpoints:    web:      exposure:        include: "*" # or health,info

增强#

1.对API doc client增加tags属性

具体使用请查看:https://shenyu.apache.org/docs/user-guide/api-doc/shenyu-annotation-apidoc

具体pr请查看:https://github.com/apache/shenyu/pull/4362

2.添加Brpc的集成测试

具体pr请查看:https://github.com/apache/shenyu/pull/4319

3.Brpc支持共享线程池

具体pr请查看:https://github.com/apache/shenyu/pull/4402

4.为加密插件(cryptorRequst和cryptorResponse)增加映射类型

具体pr请查看:https://github.com/apache/shenyu/pull/4418

5.加密插件支持多个个字段加密

具体pr请查看:https://github.com/apache/shenyu/pull/4435

6.添加p2c负载均衡算法

具体pr请查看:https://github.com/apache/shenyu/pull/4451

7.使用base64生成插件字符串,并存储到插件数据中

具体使用请查看:https://shenyu.apache.org/zh/docs/next/developer/custom-plugin

具体pr请查看:https://github.com/apache/shenyu/pull/4473

8.添加最短响应负载均衡算法

具体pr请查看:https://github.com/apache/shenyu/pull/4488

9.添加hash负载均衡测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4383

10.添加DetailSerivice测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4450

11.提供宽泛的路径策略

具体配置如下:

shenyu:    switchConfig:       local: true       collapseSlashes: false #true表示开启宽泛路径支持

具体pr请查看:https://github.com/apache/shenyu/pull/4522

12.添加shenyu-common的enums包测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4541

13.添加shenyu-common的dto包测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4549/

14.添加Add shenyu-admin的model包测试用例

具体pr请查看:https://github.com/apache/shenyu/issues/4540

15.添加shenyu match cache测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4557

16.支持k8s探针

具体pr请查看:https://github.com/apache/shenyu/pull/4567

17.添加shenyu-admin的service包测试

具体pr请查看:https://github.com/apache/shenyu/pull/4579

18.在API文档中添加json支持

具体pr请查看:https://github.com/apache/shenyu/pull/4591

19.mock插件的SPEL默认为安全的

具体pr请查看:https://github.com/apache/shenyu/pull/4606

20.添加ShenyuClientApiDocExecutorSubscriber的测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4632

21.为shenyu-client-sofa模块添加测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4688

22.为shenyu api doc添加tag relation

具体pr请查看:https://github.com/apache/shenyu/pull/4362

23.添加windows下的启动、停止脚本

具体pr请查看:https://github.com/apache/shenyu/pull/4673

24.添加ShenyuSdkClientFactory的测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4645

25.添加shenyu e2e springcloud plugin的websocket同步支持

具体pr请查看:https://github.com/apache/shenyu/pull/4698

26.支持divide插件自动下线

具体pr请查看:https://github.com/apache/shenyu/pull/4702

27.添加springcloud service instance缓存

具体pr请查看:https://github.com/apache/shenyu/pull/4705

具体使用请查看:https://shenyu.apache.org/zh/docs/next/plugin-center/proxy/spring-cloud-plugin

shenyu:    springCloudCache:       enabled: false # 为true是开启springcloud缓存

28.更改密码支持i18n

具体pr请查看:https://github.com/apache/shenyu/pull/4758

29.shenyu discovery支持websocket同步

具体pr请查看:https://github.com/apache/shenyu/pull/4768

30.升级springboot版本到2.7.13

具体pr请查看:https://github.com/apache/shenyu/pull/4783

31.为e2e-springcloud添加nacos,zookeeper同步测试

具体pr请查看:https://github.com/apache/shenyu/pull/4747

32.添加api doc client注解生成属性

具体pr请查看:https://github.com/apache/shenyu/pull/4845

33.支持zookeeper客户端自动下线

具体pr请查看:https://github.com/apache/shenyu/pull/4806

34.支持Apollo client自动下线

具体pr请查看:https://github.com/apache/shenyu/pull/4855

35.支持swagger文档,并将文档存储到数据库

具体pr请查看:https://github.com/apache/shenyu/pull/4849

36.支持nacos client自动下线

具体pr请查看:https://github.com/apache/shenyu/pull/4890

37.添加alibaba dubbo e2e 测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4859

38.添加apache dubbo e2e 测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4899

39.添加shenyu spring sdk测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4913

40.添加sofa e2e测试

具体pr请查看:https://github.com/apache/shenyu/pull/4919

41.添加Apollo数据同步的测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4918

42.添加数据库的连接池配置(hakari)

具体pr请查看:https://github.com/apache/shenyu/pull/4938

43.为shenyu添加idea icon

具体pr请查看:https://github.com/apache/shenyu/pull/4951

重构#

1.重构shenyu admin

具体pr请查看:https://github.com/apache/shenyu/pull/4355

2.优化least active balance算法

具体pr请查看:https://github.com/apache/shenyu/pull/4342

3.优化shenyu sign插件的第一个版本的兼容性

具体pr请查看:https://github.com/apache/shenyu/pull/4332

具体使用请查看:https://shenyu.apache.org/docs/plugin-center/security/sign-plugin

4.优化shenyu upstream check逻辑

具体pr请查看:https://github.com/apache/shenyu/pull/4386

5.优化项目的全局版本

具体pr请查看:https://github.com/apache/shenyu/pull/4394

6.优化ShenyuConsulConfigWatch的代码

具体pr请查看:https://github.com/apache/shenyu/pull/4400

7.优化shenyu前缀树匹配逻辑

具体pr请查看:https://github.com/apache/shenyu/pull/4414

8.优化rule condition提交时的校验

具体pr请查看:https://github.com/apache/shenyu/pull/4403

9.优化shenyu-client-websocket的客户端注册代码

具体pr请查看:https://github.com/apache/shenyu/pull/4462

10.添加shenyu admin依赖Micrometer的许可证

具体pr请查看:https://github.com/apache/shenyu/pull/4409

11.更新 maven-assembly-plugin打包插件到3.5.0版本

具体pr请查看:https://github.com/apache/shenyu/pull/4673

12.优化全局插件的排序

具体pr请查看:https://github.com/apache/shenyu/pull/4429

13.在shenyu admin中使用BearerToken替代StatelessToken

具体pr请查看:https://github.com/apache/shenyu/pull/4516

14.重构shenyu-logging模块

具体pr请查看:https://github.com/apache/shenyu/pull/4526

15.对api doc支持校验

具体pr请查看:https://github.com/apache/shenyu/pull/4564

16.优化shenyu前缀树,并支持*匹配

具体pr请查看:https://github.com/apache/shenyu/pull/4569

17.优化插件的热加载

具体pr请查看:https://github.com/apache/shenyu/pull/4392

18.优化ShenyuWebHandler的putPlugin方法

具体pr请查看:https://github.com/apache/shenyu/pull/4598

19.重构Shenyu webfilter

具体pr请查看:https://github.com/apache/shenyu/pull/4614

20.重构 oauth2 plguin插件

具体pr请查看:https://github.com/apache/shenyu/pull/4624

21.重构shenyu选择器的continued字段

具体pr请查看:https://github.com/apache/shenyu/pull/4635

22.重构shenyu选择和规则的匹配缓存

具体pr请查看:https://github.com/apache/shenyu/pull/4578

23.删除了shenyu客户端中未使用的泛型

具体pr请查看:https://github.com/apache/shenyu/pull/4653

24.重构shenyu对sentinel插件的支持

具体pr请查看:https://github.com/apache/shenyu/pull/4669

25.将缓存数据通过actuator端点暴露

具体pr请查看:https://github.com/apache/shenyu/pull/4637

https://github.com/apache/shenyu/pull/4658

26.重构checkUserPassword方法,启动时不打印已知错误日志

具体pr请查看:https://github.com/apache/shenyu/pull/4697

27.添加打印日志的参数

具体pr请查看:https://github.com/apache/shenyu/pull/4637

28.重构shenyu全局异常处理

具体pr请查看:https://github.com/apache/shenyu/pull/4709

29.添加了shenyu插件上传的集成测试

具体pr请查看:https://github.com/apache/shenyu/pull/4679

30.优化语法糖

具体pr请查看:https://github.com/apache/shenyu/pull/4700

31.优化discovery_upstream的discovery_handler_id字段

具体pr请查看:https://github.com/apache/shenyu/pull/4710

32.重构shenyu-plugin模块,将proxy插件分类归档

具体pr请查看:https://github.com/apache/shenyu/pull/4765

33.重构AlibabaDubboConfigCache的缓存

具体pr请查看:https://github.com/apache/shenyu/pull/4772

34.移除hutool的依赖

具体pr请查看:https://github.com/apache/shenyu/pull/4773

35.重构ShenyuClientShutdownHook

具体pr请查看:https://github.com/apache/shenyu/pull/4780

36.Extractor添加BaseAnnotationApiBeansExtractor

具体pr请查看:https://github.com/apache/shenyu/pull/4787

37.支持多客户端注册

具体pr请查看:https://github.com/apache/shenyu/pull/4790

38.重构Shenyu-e2e支持Shenyu的check style

具体pr请查看:https://github.com/apache/shenyu/pull/4799

39.优化shenyu客户端注册逻辑

具体pr请查看:https://github.com/apache/shenyu/pull/4809

40.添加shenyu divide插件的域名测试

具体pr请查看:https://github.com/apache/shenyu/pull/4803

41.更新rpc_ext字段的扩展

具体pr请查看:https://github.com/apache/shenyu/pull/4821

42.优化consul的连接操作

具体pr请查看:https://github.com/apache/shenyu/pull/4832

43.重构shenyu e2e的springcloud的yaml添加方式

具体pr请查看:https://github.com/apache/shenyu/pull/4837

44.为k8s ingress controller添加集成测试

具体pr请查看:https://github.com/apache/shenyu/pull/4820

45.拆分apidoc明细接口的document字段,增加requestHeaders、responseParameters等字段

具体pr请查看:https://github.com/apache/shenyu/pull/4865

46.加swagger示例项目,测试API文档的相关功能

具体pr请查看:https://github.com/apache/shenyu/pull/4825

47.优化shenyu admin的json格式表单字段的显示

具体pr请查看:https://github.com/apache/shenyu/pull/4873

48.重构shenyu日志可观测性

具体pr请查看:https://github.com/apache/shenyu/pull/4874

49.添加bootstrap启动日志

具体pr请查看:https://github.com/apache/shenyu/pull/4879

50.重构swagger的api文档

具体pr请查看:https://github.com/apache/shenyu/pull/4892

51.升级grpc版本至1.53.0

具体pr请查看:https://github.com/apache/shenyu/pull/4841

52.重构api元数据处理函数

具体pr请查看:https://github.com/apache/shenyu/pull/4948

53.优化代码和pom依赖

具体pr请查看:https://github.com/apache/shenyu/pull/4945

Bug修复#

1.优化h2的路径

具体pr请查看:https://github.com/apache/shenyu/pull/4351

2.修复加密响应插件的调用错误

具体pr请查看:https://github.com/apache/shenyu/pull/4331

3.修复jdk8 Map computeIfAbsent性能bug

具体pr请查看:https://github.com/apache/shenyu/pull/4338

4.修复zombieRemovalTimes代码

具体pr请查看:https://github.com/apache/shenyu/pull/4368

5.修复升级后的sql错误

具体pr请查看:https://github.com/apache/shenyu/pull/4374

6.删除detectorOfflineLinks标签

具体pr请查看:https://github.com/apache/shenyu/pull/4382

7.忽略扁平化的pom

具体pr请查看:https://github.com/apache/shenyu/pull/4390

8.修复LOG调用方法

具体pr请查看:https://github.com/apache/shenyu/pull/4387

9.使用nacos修复sheyu-example-springcloud的NPE

具体pr请查看:https://github.com/apache/shenyu/pull/4396

10.修复 Shenyu-admin名称的类型争论

具体pr请查看:https://github.com/apache/shenyu/pull/4340

11.修复负载平衡spi资源

具体pr请查看:https://github.com/apache/shenyu/pull/4411

12.修复sql脚本错误

具体pr请查看:https://github.com/apache/shenyu/pull/4412

13.修复jackson的24小时格式和时区

具体pr请查看:https://github.com/apache/shenyu/pull/4413

14.修复JwtUtils错误

具体pr请查看:https://github.com/apache/shenyu/pull/4420

15.修复dubbo调用者缓存bug

具体pr请查看:https://github.com/apache/shenyu/pull/4433

16.修复丢失HOST的删除操作

具体pr请查看:https://github.com/apache/shenyu/pull/4425

17.修复SpringMvcClientEventListener测试用例

具体pr请查看:https://github.com/apache/shenyu/pull/4252

18.修复zombie更新PENDING_SYNC的错误

具体pr请查看:https://github.com/apache/shenyu/pull/4430

19.修复windlfu的内存泄漏

具体pr请查看:https://github.com/apache/shenyu/pull/4486

20.修复因规则过多导致规则查询失败的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4499

21.修复示例http中缺少执行器依赖项和端口错误

具体pr请查看:https://github.com/apache/shenyu/pull/4506

22.修复UpstreamCheckUtils的http和https错误

具体pr请查看:https://github.com/apache/shenyu/pull/4509

23.修复FileFilter造成内存泄漏的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4507

24.修复zookeeper同步错误

具体pr请查看:https://github.com/apache/shenyu/pull/4906

25.修复MemorySafeWindowTinyLFUMap内存泄漏错误

具体pr请查看:https://github.com/apache/shenyu/pull/4524

26.修复ApiDoc路径缺少分隔符的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4528

27.修复 shenyu trie的NPE

具体pr请查看:https://github.com/apache/shenyu/pull/4533

28.修复插件跳过错误

具体pr请查看:https://github.com/apache/shenyu/pull/4589

29.修复oracle sql错误

具体pr请查看:https://github.com/apache/shenyu/pull/4595

30.修复shenyu admin中无法加载shenyu图标的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4605

31.修复hystrix fallback的bug

具体pr请查看:https://github.com/apache/shenyu/pull/4593

32.修复divide和springcloud的预热时间

具体pr请查看:https://github.com/apache/shenyu/pull/4619

33.修复springcloud服务选择器

具体pr请查看:https://github.com/apache/shenyu/pull/4639

34.修复 shenyu-spring-boot-starter-plugin-mock添加spring.factories

具体pr请查看:https://github.com/apache/shenyu/pull/4644

35.修复 shenyu-client-mvc和shenyu-client-springcloud丢失ip

具体pr请查看:https://github.com/apache/shenyu/pull/4681

36.修复缓存中规则数据和选择器数据为空的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4716

37.修复api文档模块更新api详情错误

具体pr请查看:https://github.com/apache/shenyu/pull/4720

38.修复从KafkaLogCollectClient中的配置获取topic

具体pr请查看:https://github.com/apache/shenyu/pull/4756

39.修复loggingConsole插件的线程安全问题

具体pr请查看:https://github.com/apache/shenyu/pull/4763

40.修复brpc集成测试响应大小

具体pr请查看:https://github.com/apache/shenyu/pull/4784

41.修复plugn-dubbo-common的选择器更新灰色发布删除缓存的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4762

42.修复shenyu admin菜单名称bug

具体pr请查看:https://github.com/apache/shenyu/pull/4805

43.修复shenyu admin无法配置consul端口的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4843

44.修复shenyu客户端元数据和uri无法与apollo同步到admin的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4851

45.修复PathVariable注解url无法匹配的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4852

46.修复PathPattern模式下无法更新uri的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4854

47.修复客户端关闭方法调用两次

具体pr请查看:https://github.com/apache/shenyu/pull/4867

48.修复 shenyu 错误处理 consul 配置

具体pr请查看:https://github.com/apache/shenyu/pull/4872

49.从Request、modifyResponse插件中删除未使用的配置

具体pr请查看:https://github.com/apache/shenyu/pull/4882

50.修复http注册元数据错误

具体pr请查看:https://github.com/apache/shenyu/pull/4889

51.修复websocket丢失用户自定义关闭状态的问题

具体pr请查看:https://github.com/apache/shenyu/pull/4844

52.修复consul寄存器在特殊符号时丢失元路径的属性

具体pr请查看:https://github.com/apache/shenyu/pull/4885

53.修复etcd同步错误

具体pr请查看:https://github.com/apache/shenyu/pull/4911

54.修复shenyu admin多次同步事件错误

具体pr请查看:https://github.com/apache/shenyu/pull/4941

55.修复 Shenyu motan插件执行错误

具体pr请查看:https://github.com/apache/shenyu/pull/4934

贡献者#

特别感谢以下贡献者对 2.6.0版本的支持和参与(排名不分先后)。

midnight2104,koonchen,847850277,balloon72,yu199195,iwangjie,damonxue,tian-pengfei,caojiajun,dragon-zhang,u3breeze,li-keguo,SuperMonkeyC,mahaitao617,tomsun28,moremind,liaolzy,Ceilzcx,misaya295,BoyuLi4,HaiqiQin,starlight2003,stulzq,ywj1352,yunlongn,aFlyBird0,dengliming,plutokaito,xuyicheng1995,lan-dian,sachin10fi,zuobiao-zhou, hudongdong129,crudboy,aoshiguchen,VampireAchao,JooKS-me,Redick01,huanccwang,lijay7674,omernaci,peng-heng,December-Pb,6freeair2016,jieyangxchen,lianjunwei,u3breeze,eurecalulu,wanyaoasiainfo,wanyaoasiainfo,Kakk22,xuziyang,menglujing,xcsnx,yu1183688986,lahmXu,fabian4,ileonli,VampireAchao,GOODBOY008,TeslaCN

成为贡献者#

我们欢迎每一位贡献者的加入ShenYu,欢迎贡献者以Apache Way的精神参与ShenYu!

贡献者指南请参考:

https://shenyu.apache.org/zh/community/contributor-guide

【学生的Apache ShenYu贡献之路】

· One min read

个人介绍#

姓名:秦海棋

学校:东北大学

角色: Apache ShenYu Committer

邮箱:haiqi@apache.org

github:https://github.com/HaiqiQin

初遇shenyu#

最早接触shenyu是经同学朱坤帅(jooks-me)的介绍,当时坤帅已经在社区做过了很多贡献,有一定的经验。在介绍我进入shenyu社区后,他不断的指点着我,带领我了解项目,讲解社区的相关规约,在他的鼓励下我提交了人生中第一个有关开源项目的pr。之后的日子里,我主要尝试研读shenyu的代码,同时修改一些小的错误,做一些插件的单元测试或者集成测试。

渐至佳境#

作为一名开发,当然不希望自己对shenyu的贡献仅限于测试类型任务。正逢shenyu报名了谷歌开源之夏(Google Summer of Code)活动,所以我积极查看议题,最终决定参加shenyu-plugin-logging-elasticsearch课题。在肖宇老师(猫大人)耐心的指导下,我最终完成了课题,如愿以偿地为shenyu提交了开发相关的代码。通过这次课题,我更好地了解了shenyu,同时内心更渴望继续为shenyu贡献代码。在这之后我尝试向shenyu贡献了两个负载均衡的策略,目前以及后续会对shenyu-e2e模块进行贡献。

收获满满#

  • 了解到更多有关网关以及为服务方面的知识

  • 学习到了不同注册中心的注册原理

  • 学习到了不同数据同步方式的同步原理

  • 学习到了如何编写更优雅的代码

一些建议#

  • 学会阅读官方文档。现在文档已经相当完善了,基本能够覆盖用户的需求。
  • 参加周会。shenyu每双周会开一次例会,在例会上会介绍项目目前的开发进度,小伙伴们可以选取自己感兴趣的任务进行开发,也可以和大佬们交流技术。

特别鸣谢#

我一直认为shenyu是一个有温度的大家庭,在我遇到困难的时候,很多小伙伴都对我提供了很大的帮助,使我在贡献的时候少走了很多弯路。在此感谢帮助过我的小伙伴(以下排名不分先后):yu199195,moremind,JooKS-me,erdengk,qifanyyy。

[开源之夏】Apache ShenYu 课题来袭 | 邀您深耕高性能网关]

· One min read

[开源之夏】Apache ShenYu e2e课题来袭 | 邀您深耕高性能网关#

开源之夏#

开源之夏是由中科院软件所开源软件供应链点亮计划发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链建设。

学生开启报名#

开源之夏 2023 学生报名 4 月 29 日正式开启啦!同学们可以在开源之夏官网 https://summer-ospp.ac.cn/ 挑选项目,与导师沟通并准备项目申请材料、提交申请。

ospp-2023.jpg

Apache ShenYu简介#

Apache ShenYu是一款支持多语言、多协议(Dubbo,SpringCloud,gRPC,Motan,SofaTars, BRPC)、插件化设计、高度可动态化配置、高度可自主化开发的Java网关。内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。流量配置动态化,性能极高。支持集群部署,支持 A/B Test,蓝绿发布等功能。

Apache ShenYu社区作为Apache基金会组织下的开源项目社区。截止目前在全球共聚集了340位贡献者,他们以“Apache Way”的精神参与ShenYu,为ShenYu做出贡献,与ShenYu共同成长!

Apache ShenYu课题项目介绍#

课题任务门槛不会太高的哦,且全程由社区导师倾心指导。

项目背景#

Shenyu是一个异步的,高性能的,跨语言的,响应式的API网关,但目前ShenYu缺少必要的end to end engine以及test case, end to end test是shenyu项目整体贯通的重要部分。

相关技能#

了解Apache ShenYu的技术架构,了解Apache ShenYu的端到端测试框架,能够利用现有代码编写TestSpec,需要了解shenyu的数据同步框架包括websocket,http,zookeeper,nacos,apollo等中间件以及算法,能够编写docker-compose,了解testcontainer,docker等e2e开发必备工具。

相关任务#

1.编写shenyu端到端测试框架,编写shenyu端到端测试引擎(难度:高)

2.需要在e2e中实现admin不同数据库(mysql,oracle,postgres,h2)的存储,保证数据存储正确

3.需要通过配置方式以及shenyu-client注册方式保证数据能够正确添加到shenyu-admin(难度:高)

4.使用不同的数据同步方式(websocket,http,zookeeper,nacos,apollo)保证admin到gateway的数据同步正确

5.添加alibaba dubbo,apache dubbo,sofa,tars,motan相关代理插件的端到端测试用例

6.编写特定的TestSpec修改admin字典,元数据,插件,选择器,规则数据,并且在修改后进行回归测试,保证调用逻辑正确(难度:高)

7.编写对应github ci文件,保证ci流程在github action运转正常

项目产出要求#

1.编写对应的e2e测试用例

2.使用e2e实现admin使用不同的数据库存储数据的测试

3.实现不同数据同步方式同步数据的端到端测试

4.编辑对应的e2e文档

项目技术要求#

1.遵循shenyu代码规范

2.深入理解spring webflux

3.深入理解shenyu的数据同步原理

4.深入理解shenyu client注册数据原理

5.深入了解shenyu的端到端测试引擎以及框架

项目成果仓库#

项目地址#

其他信息#

你能从活动中获得什么?#

开发经历#

参与开源项目,成为大型开源项目的贡献者,了解多领域多难度梯度任务,给你丰富的大型开源项目实战经验,同时也是锻炼开发能力的好机会!

组委会奖励#

1.你将获得结项奖金和结项证书:通过结项考核的学生将有机会获得优秀学生证书。

2.本次比赛共设有两个难度等级,不同等级对应不同奖金:

进阶难度:学生结项奖金税前人民币 12000 元

基础难度:学生结项奖金税前人民币 8000 元

本次比赛的奖金均由开源之夏组委会提供。

Apache ShenYu社区深度交流#

1.参与开源之夏@Apache ShenYu课题,你将能够同Apache ShenYu社区全球300+位贡献者交流。

2.参与开源之夏@Apache ShenYu课题,你将成为Apache ShenYu贡献者,在持续贡献者之后,更有机会成为Apache ShenYu Committer。

快速参与开源之夏#

开源之夏2023 社区各项目课题将从4月29日开始接受学生参与项目申请,欢迎通过上方联系方式,与各导师沟通并准备项目申请材料。

shenyu-ingress-controller能力增强#

项目背景#

Kubernetes Controller是Apache ShenYu云原生建设的重要步骤,社区正在建设shenyu-ingress-controller,以实现K8s ingress资源的对接。但是,目前shenyu-ingress-controller功能较为简单,仅支持K8s ingress原生的资源定义。

本项目需要基于annotation拓展shenyu-ingress-controller,尽可能地继承Apache ShenYu丰富的原生功能。

项目产出要求#

  • 增强shenyu-ingress-controller的能力

  • 完成核心代码的编写

  • 完成相应单元测试和集成测试

  • 完成相关文档

项目技术要求#

  • 熟悉Java和Spring Framework
  • 熟悉Kubernetes
  • 了解API网关

项目成果仓库#

项目地址#

https://summer-ospp.ac.cn/org/prodetail/2362f0183

其他信息#

[开源之夏】Apache ShenYu tcp代理来袭 | 邀您深耕高性能网关#

开源之夏#

开源之夏是由中科院软件所开源软件供应链点亮计划发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链建设。

学生开启报名#

开源之夏 2023 学生报名 4 月 29 日正式开启啦!同学们可以在开源之夏官网 https://summer-ospp.ac.cn/ 挑选项目,与导师沟通并准备项目申请材料、提交申请。

ospp-2023.jpg

Apache ShenYu简介#

Apache ShenYu支持各种语言(http 协议),支持 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议。插件化设计思想,插件热插拔,易扩展。灵活的流量筛选,能满足各种流量控制。内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。流量配置动态化,性能极高。 支持集群部署,支持 A/B Test,蓝绿发布的Java网关。

Apache ShenYu课题项目介绍#

课题任务门槛不会太高的哦,且全程由社区导师倾心指导。

项目背景#

本项目主要是通过插件的方式更加灵活地、可拓展地实现不同通信协议(TCP/UDP/WebSocket等)的代理,以增强ShenYu的通信代理功能。项目提供管理后台可手动配置转发下游的IP、PORT等数据,同时支持下游服务通过ShenYu客户端自动注册ShenYu网关,此外也支持业务提供注册中心地址来完成服务发现和注册功能。业务请求进来时,ShenYu网关根据不同的通信协议类型,匹配不同的通信协议插件来完成通信代理。

相关技能#

了解Apache ShenYu的技术架构,熟悉Java和Spring Framework,熟悉reactor等前端组件和框架,熟悉API网关,熟悉tcp、udp等相关协议。

项目产出要求#

完成tcp/udp/websocket等代理插件的开发

Task1:完成tcp/udp/websocket的用来代理到下游服务的代理插件功能开发;

✅ 完成注册中心监听元数据的开发

Task1:在shenyu-admin开发支持的多种注册中心(nacos/consul/zk等)监听业务下游服务相关元数据;

✅ 完成代理插件相关元数据的数据同步开发

Task1:完成通信插件代理相关数据同步到网关的开发;

✅ 完成和设计服务自动发现相关表和后台数据开发

Task1:完成相关数据库表设计;

Task2:完成相关表的CRUD开发;

✅ 完成shenyu管理后台通信代理相关数据的编辑

Task1:前端增加编辑通信代理相关元数据的编辑新增页面;

Task2:增加前端页面对应的后端接口;

✅ 完成通信协议代理的集成测试单元测试和文档输出

Task1:完成相关改动的单元测试;

Task2:完成整个功能的集成测试;

Task3:完成整个功能相关接入文档以及功能介绍相关文档的输出。

项目技术要求#

1.熟悉Java和Spring Framework

2.熟悉reactor等前端组件和框架

3.熟悉API网关.

项目成果仓库#

项目地址#

导师邮箱#

mahaitao@apache.org

快速参与开源之夏#

开源之夏2023 社区各项目课题将从4月29日开始接受学生参与项目申请,欢迎通过上方联系方式,与各导师沟通并准备项目申请材料。

ospp-2023.jpg

[Google Summer of Code & Apache ShenYu task is coming | Invite you to explore the high performance gateway]

· One min read

Google Summer of Code & Apache ShenYu springcloud e2e task is coming | Invite you to explore the high performance gateway#

Description#

Shenyu is a native API gateway for service proxy, protocol translation and API governance. but Shenyu lack of End-To-End Tests.

Relevant skills:

  • Understand the architecture of ShenYu
  • Understand SpringCloud micro-service and ShenYu SpringCloud proxy plugin.
  • Understand ShenYu e2e framework and architecture.

How to coding

  • please refer to org.apache.shenyu.e2e.testcase.plugin.DividePluginCases

How to test

  • start shenyu admin in docker
  • start shenyu boostrap in docker
  • run test case org.apache.shenyu.e2e.testcase.plugin.PluginsTest#testDivide

Task List#

  1. develop e2e tests of the springcloud plug-in.
  2. write shenyu e2e springcloud plugin documentation in shenyu-website.
  3. refactor the existing plugin test cases.

Design and implement shenyu ingress-controller in k8s#

Background#

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance. Currently, ShenYu has good usability and performance in microservice scenarios. However, ShenYu's support for Kubernetes is still relatively weak.

Tasks#

  1. Discuss with mentors, and complete the requirements design and technical design of shenyu-ingress-controller.
  2. Complete the initial version of shenyu-ingress-controller, implement the reconcile of k8s ingress api, and make ShenYu as the ingress gateway of k8s.
  3. Complete the ci test of shenyu-ingress-controller, verify the correctness of the code.

Relevant Skills#

  1. Know the use of Apache ShenYu
  2. Familiar with Java and Golang
  3. Familiar with Kubernetes and can use java or golang to develop Kubernetes Controller

【From company gateway framework selection to Apache ShenYu Committer】

· One min read

Introduction of new Committer#

Hello everyone, my name is Shuo Li , java architect, currently engaged in a big-sized Internet company, It is my honor to be invited by the Apache ShenYu community as the Committer. Let me share with you my first meet, acquaintance, understanding, growth and suggestions with the Apache ShenYu community.

Meet the Apache Shenyu community for the first time#

The story starts from 2020. In the early stage, I used SpringCloud Gateway + Nacos Config Event to realize the dynamic routing of gateway by myself. Because there was no dashboard of Gateway at that time, it was very painful. My team made a dashboard based on Micro Enterprise, which has a lot of functionality and limitations. From then on, I started to pursue a good gateway. One day, I found ShenYu, and saw that ShenYu's overall architecture was in sharper contrast to SpringCloud Gateway. ShenYu outperforms Gateway in terms of overall architecture design, function design, plug-in design, etc. ShenYu can be said to be the next generation gateway product. After that, I started to have a certain understanding of Apache ShenYu from building environment to running example project, and then to read plug-in chain and data synchronization, SPI mechanism and other source code.

Start submitting PR#

It was not until January 2022 that I started to submit my first PR, which was to fix a problem that caused null Pointers when the Admin module started the default load instance. The function was small, but its significance was remarkable. It meant that I had a good start on the open source road from learning to contributing.

Ongoing open source contributions and gains#

So far, I have participated in the open source of Apache ShenYu community for more than half a year, contributing a lot and growing and harvesting a lot. The details are as follows:

  • Witnessed Shenyu graduate from Apache Incubator and become a top Apache project.
  • Fixed ShenYu admin starting null pointer problem.
  • Added ShenYu Rewrite plugin support for PathVariable functionality.
  • Responsible for the functional support of the entire Shenyu-Client-Golang project.
  • Participated in the repair of some discovered problems, integration test writing, code of other CR contributors, corresponding functional documentation writing, etc.

Thanks to the community#

Thanks to my friends who helped me or inspired me for free (in no particular order): yu199195,yonglun,luoxiaolong,lianjunwei,gaohan.

A little advice for newcomers#

1.Be sure to check out the website or Github first 2.Follow the official website or project documents to try to run the relevant functional modules of Example 3.Feel free to submit an issue to the community if you have any ideas

Attend ShenYu biweekly meetings to keep up with the community and meet with developers one-on-one to ask questions

How to join Apache ShenYu#

  1. How to become a Contributor

    The Apache ShenYu community has purposely written a very comprehensive Contributor Guide

  2. Github Issues

  3. Subscribe emails

    Email dev-subscribe@ShenYu.apache.org;

    After the sending is successful, you will receive a reply from dev-subscribe@ShenYu.apache.org, please reply to this email according to the prompt of the email to confirm the subscription;

    After replying to confirm, you will receive a welcome email indicating that you have successfully subscribed to emails.

【从用户到Apache ShenYu Committer】

· One min read

个人介绍#

大家好,我是何凤恩 ,目前从事Java开发,非常荣幸在受邀成为Apache ShenYu社区的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识ShenYu网关#

最早接触shenyu在2021年3月左右,当时还叫soul,由于部门业务场景需要统一网关的使用,选择shenyu网关的主要原因是shenyu的插件化设计很符合我们所需的场景,当时主要使用的一些功能插件包括divide、sentinel熔断、ratelimiter、公司内部rpc的协议转换以及log2Mongo等。随着shenyu的不断升级发版,我们也在不断地升级我们的代码。

初次看到shenyu的代码时,我和大多数开发者一样都遇到这样几个问题:响应式编程到底是什么?响应式编程到底怎么写才对?shenyu的代码怎么会这么写呢?带着这些疑问,我阅读了很多遍shenyu的源码,然后自己调试shenyu,查看shenyu对于请求的处理以及各个插件的具体逻辑。再此期间也曾在shenyu的社区提过很多issues,感谢shenyu社区给予我的帮助。

开源之路#

初次向shenyu提交代码还是在2022年3月,当时主要是在使用rpc进行协议转换时发现请求体丢失数据,然后发现是由于rpc参数转换插件丢失了数据,于是我第一次向shenyu提交了该bug的解决代码。

在后续的持续贡献中,主要是贡献了如下功能:

  • springboot的升级改造
  • springcloud插件的重构
  • cache插件的重构
  • logging模块以及各个logging插件的重构
  • shenyu官网插件文档的重构

感谢社区的朋友们#

在此特别感谢各位帮助过我的伙伴们(排名不分先后):yu199195,qicz,li-keguo,dragon-zhang,renzhuyan,hutaishi,impactCn,yunlongn。

对于开源开发者的话#

开源开发其实一件很有意义又很痛苦的事,很考验一个人的耐力,在无数的pr之后,可能会因为某些困难、问题放弃,而坚持下来的人,无论在技术还是沟通能力上,亦或者开源贡献上,都会有一定的收获。

开源不是一味的做任务,也不是被固定在某一个项目、某一个任务,而是你有空就可以参与任何一个项目。一个人获取会很快,但一群人会走的更远!

如何参与ShenYu#

1.ShenYu在官网提供很全面的贡献者指南,https://shenyu.apache.org/zh/community/contributor-guide

2.如果你想参与shenyu的功能开发和问题修复,可关注shenyu的github issues,https://github.com/apache/shenyu/issues

【从CRUD Boy到Apache ShenYu Committer】

· One min read

新晋Committer介绍#

大家好,我是鄢仁柱 ,目前在微众银行做java/大数据业务开发。非常荣幸受邀成为Apache ShenYu社区的Committer,作为一名业务开发人员,平常关注点更多是在业务上,然后去写CRUD,而参与Apache Shenyu社区开源,让我有别样体验,更多关注点是放在代码本身,考虑如何支持各种协议、插件拓展、数据同步等。下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识Apache Shenyu社区#

故事时间线还得回到2020年底开始说起,当时部门为了让我们能更好的成长,给我们报名了极客时间的JAVA进阶训练营,也就是在这个训练营里有幸结识了猫大人,在猫大人读源码活动的带领下,我第一次接触到了Apache Shenyu,当时还没进入Apache孵化器,还叫Soul(下面都称Apache Shenyu)。读Apache Shenyu源码活动,总共持续三周,在三周里我们每天读源码、写博客,从搭环境到跑示例工程,再到读插件链及数据同步等源码,收获巨大,对Apache Shenyu也有了一定的了解。

开始提交PR#

一直到2021年5月份,我开始提交了我的第一个pr,当时是给Admin模块添加了一个单元测试,功能很小,但它的意义却是非凡的,它意味的我从学习开始到贡献,从自己玩开始到开源,在开源之路上有了一个很好的开始。

持续的开源贡献与收获#

到目前为止,参与Apache Shenyu社区开源已有一年多一点时间,贡献了许多,也成长收获了许多。具体如下:

  • 参与soul迁移至Apache孵化器,并改名为Apache Shenyu。
  • 参与各模块单元测试的编写。
  • 负责整合TarsResponsePlugin,GrpcResponsePlugin,SofaResponsePlugin,DubboResponsePlugin等重构为ResponsePlugin统一处理。
  • 负责Admin Oracle数据库的支持。
  • 负责Shenyu网关实例注册到Consul的支持。
  • 参与一些已发现问题的修复、示例工程编写、jar包替换及升级、集成测试编写等。

感谢社区小伙伴#

感谢无偿帮助过我或给过我启发的小伙伴(排名不分先后):yu199195,dragon-zhang,li-keguo,qicz,moremind,zouchangfu,lianjunwei

给新人的一点建议#

Apache Way有个理念:社区大于代码,坚信健康的社区比好的代码更重要。这一年多参与下来也让我感受到了Apache Shenyu社区这一点践行的非常好,双周会议、任务遵从共识自愿、社区公开透明、小伙伴们热心帮助等。所以今天同样将这句话送给新人,社区大于代码,在这里,你都可以试一试。

如何参与Apache ShenYu#

  1. 如何成为贡献者

    Apache ShenYu社区特意写了非常全面的贡献者指南

  2. Github Issues

  3. 订阅邮件

    dev-subscribe@ShenYu.apache.org 发送一封邮件;

    发送成功后,您会收到来自 dev-help@ShenYu.apache.org 的回信,请按照邮件的提示回复这封邮件,确认订阅;

    在回复确认后,您会收到一封欢迎邮件,表示您已经成功订阅了邮件。

【你也可以成为Apache ShenYu Committer】

· One min read

新晋Committer介绍#

大家好,我是张子成 ,java/rust开发者,目前在某中型互联网公司从事中间件开发,工作方向包括网关/RPC/MQ。非常荣幸受邀成为Apache ShenYu社区的Committer,下面跟大家分享一下我与Apache ShenYu社区的相遇、相识、相知、成长和建议。

相遇#

2021年8月中旬的时候,我加入现公司,转型为中间件开发(在上家做业务开发),接到的第一个任务就是尽快熟悉公司的网关中间件,于是一款叫Soul的网关进入了我的视野(Soul是ShenYu的前身,ShenYu于2021年进入了Apache孵化器,以下的Soul/ShenYu都指代Apache ShenYu(incubating))。

相识#

在经过大概一周的学习后,我对Soul的主链路有了一定程度的认识。在后续2-3个月的时间里,随着不断地帮公司业务开发回答/解决问题,慢慢地我也发现了一些Soul不符合人体工程学的地方。

直到2021年12月的时候,出于公司需要和个人兴趣,我开始着手调研ShenYu,并考虑升级方案,此时才算真正开始接触ShenYu和社区。

相知#

ShenYu是一个异步的,高性能的,跨语言的,响应式的API网关,其坚持插件化、全链路异步化的设计理念,目前已经集成了很多插件供用户选择,如果已有插件不满足需求,可以对着官网文档 自己上手做定制化开发。

ShenYu社区是活跃的、友善的,为了让更多的同学成为Contributor/Commiter,在github的issues 页面时不时就有新任务 发布,其中有不少非常适合新人的任务 。即使发布的任务对你来说有一定难度,你仍然可以尝试提交PR,社区的小伙伴会review你的PR并提供一些指导建议,帮助你在思想碰撞中提升自己。

我的社区成长#

首先感谢无偿帮助过我的小伙伴(排名不分先后):yu199195,JooKS-me,KevinClair,lianjunwei,qicz,AhahaGe,hutaishi

贡献与收获#

  • 学习如何同时兼容spring-boot 1.x和2.x,并贡献了非常多的方案。
  • 熟悉project-reactor和spring-webflux的使用,然后贡献大量的优化。
  • 熟悉netty后,贡献了netty线程池设置。
  • 熟悉dubbo后,扩展了ShenYu中的dubbo线程池。
  • 了解grpc和motan等RPC,贡献了共享线程池技术。
  • 提供MemoryLimitedLinkedBlockingQueue和MemorySafeLRUMap,较好地解决了技术悖论。

贡献Apache ShenYu的建议#

  1. 初窥门径

    从官网文档开始,首先是admin/bootstrap的部署 ,其次选择一种你最熟悉的方式接入ShenYu ,最后发起请求,验证是否接入成功。

  2. 驾轻就熟

    在一段时间后,你对ShenYu的使用已经比较熟悉了。此时你可以从一种接入方式入手,看看数据最终是如何发送到admin并存储的。

  3. 略有小成

    你已经熟悉了注册阶段的某一条链路,可以开始按照你的接入方式来梳理运行阶段bootstrap的主链路了,此时不建议深挖每个插件的细节。

  4. 炉火纯青

    这个时候你已经对ShenYu的全局有一定认识了,也许在这个阶段你已经发现了一些ShenYu的小bug,或者你觉得ShenYu的某些使用姿势不符合人体工程学,那还等什么?

    到社区看看是否有人遇到了跟你一样的问题,你可以提交一些BUG/ISSUE/PR,社区会尽快回复你的。

  5. 出类拔萃

    随着不断地参与社区,你对社区的贡献越来越多,最后能够帮助他人解决问题,能够指导他人。

    你一直保持好奇,深入学习,能立足于底层。

    你具备一定的大局观,可以从全局的角度看待优化。

    你能够看到问题本质,并解决根本问题。

如何参与Apache ShenYu#

  1. 如何成为贡献者

    Apache ShenYu社区特意写了非常全面的贡献者指南

  2. Github Issues

  3. 订阅邮件

    dev-subscribe@ShenYu.apache.org 发送一封邮件;

    发送成功后,您会收到来自 dev-help@ShenYu.apache.org 的回信,请按照邮件的提示回复这封邮件,确认订阅;

    在回复确认后,您会收到一封欢迎邮件,表示您已经成功订阅了邮件。

【Apache ShenYu 2.4.3 版本发布】

· One min read

时隔3个月,Apache ShenYu再次发布2.4.3版本,本次版本内容,有200+的pull Request,30+的贡献者参与,新增了非常多的功能,修复了很多bug,以及优化了很多内容。

新增功能#

  • 增加 Http 注册客户端的重试机制。
  • 支持 Content-Type 类型为 octet-stream。
  • 支持 Bootstrap 的URIs 的重定向。
  • 增加本地 API 授权。
  • 支持配置 Dubbo消费者线程池大小。
  • 支持 Divide 插件的失败重试机制。
  • 支持 Webscoket 的客户端配置。
  • 支持 MemoryLimitedLinkedBlockingQueue。
  • 支持 Alibaba Dubbo 插件共享线程池。
  • 支持 gRPC 插件共享线程池。
  • 增加 Metrics 插件。
  • 增加 Cache 插件。
  • 增加 Logging RocketMQ 插件。

优化项#

  • 更新 JUnit4 为 JUnit5。
  • 优化 password encryption。
  • 优化和校验 shenyu-admin 模块的接口参数。
  • 优化同步数据时,初始化数据的代码。
  • 增加 LoggingRocketMQ 插件的集成测试。
  • 在 ScheduledExecutorService 类中使用定时轮算法。
  • 重构admin 中注册 URI 的 buildHandle 方法。
  • 优化 Spring Cloud 客户端自动设置端口。
  • 重构 JWT 插件支持多等级 Tokens。
  • 优化网关netty参数自定义可配置

Fix Bug#

  • 修复 CommonUpstreamUtils 类初始化时的空指针异常。
  • 修复 Nacos 注册失败时进行判断。
  • 修复登录未注册用户时的空指针异常。
  • 修复重复打印启动日志的问题。
  • 修复重试次数,超时时间不生效的问题。
  • 修复 Token 解析报错的问题。
  • 修复 Websocket 传输大数据异常的问题。
  • 修复 NettyHttpClient 插件在失败时未重试的问题。
  • 修复 CVE-2021-41303 漏洞。
  • 修复判断所有插件包含条件不生效的问题。
  • 修复 Http Headers 丢失数据的问题。
  • 修复 Rewrite 插件不支持 URL 占位符的问题。
  • 修复 Nacos 同步数据异常的问题。
  • 修复当 ContextPath 插件打开时,Websocket 代理失败或者空指针异常的问题。
  • 修复 Http 注册客户端的端口占用检查。

移除项#

  • 移除 Monitor 插件。
  • 移除 shenyu-agent 模块。

Metrics 插件使用说明#

Metrics 插件 插件是网关用来监控自身运行状态(JVM 相关),请求的响应迟延,QPS、TPS等相关 metrics。

插件的使用#

在网关的 pom.xml 文件中添加 metrics 的依赖。

<dependency>    <groupId>org.apache.shenyugroupId>    <artifactId>shenyu-spring-boot-starter-plugin-metricsartifactId>    <version>${project.version}version></dependency>

在网关的配置 yaml 文件中编辑如下内容

shenyu:  metrics:    enabled: false  #设置为 true 表示开启    name : prometheus     host: 127.0.0.1 #暴露的ip    port: 8090 #暴露的端口    jmxConfig: #jmx配置    props:      jvm_enabled: true #开启jvm的监控指标

具体 Metrics 的指标信息可查看官网说明:https://shenyu.apache.org/zh/docs/plugin-center/observability/metrics-plugin

Cache 插件使用说明#

Cache 插件能够缓存目标服务的结果,还可以允许用户配置缓存结果失效时间。

插件的使用#

在网关的 pom.xml 文件中添加 Cache 的依赖。

<dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-cache</artifactId>    <version>${project.version}</version></dependency>

适用于数据不会频繁更新、需要大量调用、对于数据一致性要求不高的场景。

Logging RocketMQ 插件使用说明#

Apache ShenYu 网关接收客户端请求,向服务端转发请求,并将服务端结果返回给客户端。网关可以记录下每次请求对应的详细信息,例如:请求时间、请求参数、请求路径、响应结果、响应状态码、耗时、上游IP、异常信息等。

Logging-RocketMQ 插件是记录访问日志并将访问日志发送到 RocketMQ 集群的插件.

插件的使用#

在网关的 pom.xml 文件中添加依赖。

<dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-logging-rocketmq</artifactId>    <version>${project.version}</version></dependency>

具体配置以及各个参数的作用等信息可查看官网说明:https://shenyu.apache.org/zh/docs/plugin-center/observability/logging-rocketmq

下个版本规划#

新增集群方案#

  • 新增shenyu-proxy模块,支持ShenYu的集群模式,以及网关的动态扩缩容
  • 新增shenyu-nginx子项目,对接Nginx-upstream模块

新增多语言SDK#

多语言的SDK主要是为了让其他类型的语言快速的接入shenyu网关

https://github.com/apache/incubator-shenyu-client-donet

https://github.com/apache/incubator-shenyu-client-golang

https://github.com/apache/incubator-shenyu-client-python

新增 Helm Chart#

https://github.com/apache/incubator-shenyu-helm-chart

helm-ci-pipeline

【Apache ShenYu 2.5.1 版本发布】

· One min read

春节刚过,Apache ShenYu便迎来了2.5.1版本。此次发布内容,共有 259 个pull Request,64位贡献者的参与。新增了若干功能,修复了bug,优化了若干内容。

新功能#

  1. 添加 brpc 插件
  2. 支持nacos不同命名空间
  3. 优化 mock 插件
  4. 注册中心实例支持eureka
  5. 支持 API 文档
  6. 添加 sentinel 插件的规则处理参数
  7. 添加 e2e 测试引擎
  8. 添加 casdoor插件支持SSO
  9. 添加 logging-tencent-cls 插件
  10. 添加 logging-clickhouse 插件
  11. 添加 logging-pulsar 插件
  12. 添加 key-auth 插件

增强#

  1. 优化 motan 客户端注解
  2. 优化 motan 插件配置
  3. 优化 websocket 客户端注解
  4. 优化 springcloud 客户端注解
  5. 优化 springmvc 客户端注解

重构#

  1. 重构 API文档的mock请求
  2. 重构 logging-clickhouse 插件
  3. 优化 dubbo相关maven依赖
  4. 重构 sign 插件
  5. 更新 ShenyuExtConfiguration
  6. 移除不必要的单例
  7. 修复并发场景mock数据
  8. 重构 sdk 测试
  9. 重构 DefaultSignService
  10. 重构 shenyu-admin 规则
  11. 优化 ShaUtil
  12. 优化缓存
  13. 修复 ConcurrentModificationException
  14. 修复 etcd 数据同步
  15. 重构 sdk 客户端
  16. 优化请求超时
  17. 重构日志模块
  18. 重构 springcloud 客户端
  19. 重构 Motan插件
  20. 重构 admin 数据同步
  21. 重构 tars 客户端
  22. 重构 alibaba-dubbo 客户端
  23. 重构 springmvc 客户端
  24. 重构 admin 配置
  25. 优化随机算法
  26. 重构负载均衡算法
  27. 重构 logging-kafka 插件

错误修复#

  1. 移除多余的 cookie 设置
  2. 修复 appAuth 删除逻辑
  3. 修复 Cryptor-Request 插件
  4. 修复 ext 插件
  5. 修复升级脚本
  6. 修复 Nacos 注册空指针问题
  7. 修复 sandbox json 解析
  8. 修复插件更新时的异常
  9. 修复 postgresql 脚本
  10. 修复 sentinel 插件的异常
  11. 修复 TencentClsLog异常
  12. 修复更新密码异常
  13. 修复选择器分页异常
  14. 修复 request 插件异常
  15. 修复 RateLimiter插件并发处理异常
  16. 修复 sign 插件异常
  17. 修复 context-path 插件异常

特别感谢以下贡献者对 2.5.1版本的支持和参与(排名不分先后)。

dragon-zhang, zhengpeng, mahaitao, 愿凌飞, hdgaadd, dayu, SongTao Zhuang, Misaya295 , Shawn Jim , yunlongn , Will , moremind , RayayChung , Kevin Clair , huanccwang , 柯杨 , Kunshuai Zhu , fantiq , youzipi , class , kyeongsun , 杨阳洋 , Liming Deng , 杨文杰 , xcsnx , hnxiaoyuan , dependabot , xiaoyu , wzhangNJ , Zihao Huang , ywj1352 , pandaapo , WuLang , Nineteen , kyeongsun , ableYang , Runqi Zhao , WeiS , Luke.Z , lahmxu , Sinsy , Daming , BoyuLi4 , jakiuncle , Bowen Li , huanccwang , gitchenjh , DamonXue , Wu Daifu , Jiageng , nuo-promise , Guocheng Tang , likeguo , Sixh-PrFor , throwable , renzhuyan , wangteng , qinghai777 , zly123987123 , 奕仁 , 尔等同学 , qifanyyy , Jairo , ousinka

【从在校生到Apache Committer之路】

· One min read

个人介绍#

姓名:朱坤帅

学校:东北大学

角色: Apache ShenYu Committer

邮箱:jooks@apache.org

接触开源#

大二下学期,一个偶然的机会,我看到了中科院软件研究所和openEuler社区举办的开源软件供应链点亮计划(下文简称开源之夏)的宣传。后来慢慢地了解到,原来在中国有那么多人活跃在开源社区,极大推动了开源生态的发展。之后也是非常巧合,认识了Apache ShenYu的VP (肖宇),他是我在开源之夏Apache ShardingSphere社区的导师。我提前完成开源之夏的任务之后,看到ShenYu刚进入Apache孵化器没多久,如火如荼,于是就开始接触到了Apache ShenYu。

在社区中成长#

我最早给ShenYu提交的贡献并不是代码,而是文档。当时在官网发现了几个typo,于是果断提交了pr,“混”到了ShenYu的Contributor。

后来参与了社区的例会后,发现了ShenYu作为一个Apache孵化器项目,其实还存在着许多待优化、待丰富的地方。于是,我就从集成测试入手,开始了打怪升级之旅。

事实上,做集成测试能学习到的东西非常多,从Docker、CI到ShenYu的功能实现细节、微服务生态等等。有时在测试时会发现官网文档的不恰当之处,于是就需要自己阅读源码,理解代码逻辑,然后完善或更正文档;有时会发现一些bug,于是就能在定位bug、修复bug中熟悉ShenYu网关的细节。再到后来,逐渐可以自己实现一些new feature。

在对ShenYu项目越来越熟悉的同时,对ShenYu的敬畏感也越来越高,确实有种钻之弥坚的感觉。ShenYu中的设计模式、异步编程、函数式编程等都是非常巧妙,值得学习。

在开源中收获#

回顾参与开源以来的近半年,感觉自己收获颇丰,主要体现在以下几方面。

  1. 技术水平的提升。参与开源不仅能接触很多在学校学不到的知识,同时也可以看到自己曾经学过的“屠龙武术”的实践场景。Apache ShenYu作为API网关,是整个微服务系统的入口,在参与项目建设的同时,自然会接触到各种微服务领域的知识。

  2. 开拓了视野。亲身经历项目new feature的讨论,参与ApacheCon、开源年会这类活动,使得我对微服务生态以及发展趋势有了更系统的理解和思考。

  3. 对求职面试的帮助。在个人简历上多出了开源经历这一项,在我找实习的面试中,确实有一定帮助,也得到了面试官的肯定。

给新人的一些建议#

  1. 适应异步的交流方式。与我们平时的交流方式不同,开源社区往往使用的是异步的交流方式,比如邮件列表、GitHub issue、Jira等,而Apache ShenYu社区推荐的交流方式的优先级是:邮件列表 > Github issue > 微信群。这是因为通过邮件列表和github的方式,可以将问题的讨论过程和结果保留下来,是公开透明的。从另一个角度看,在邮件列表抛出问题,往往能得到最迅速且有效的解决。

  2. 积极参与讨论。社区胜于代码,这是Apache Way提倡的。通过充分的交流讨论而来的代码,更富有生命力。另外,Apache ShenYu社区每两周会召开一次线上例会,会对社区的工作做出周期性总结,以及讨论之后的目标、任务(同时也会发布到邮件列表)。

  3. 如何参与贡献?首先是经过上面说的讨论,然后才是动手。对于在工作中没有应用到ShenYu的人来说,编写集成测试、源码解析文章是非常好的切入点。同时,Apache ShenYu社区还时常会发布很多或易或难的任务,都期待大家的参与。

  4. 给想参与开源但还未动手的在校学生的建议。大胆参与开源吧,在我接触到的几个开源社区中,对学生都是更加友好、期待且包容的。另外,一些组织会举办专门引导学生群体参与开源的活动,比如开源之夏(前面提到的)、GSoC(谷歌编程之夏)等,也是非常不错的参与方式,不仅会有丰厚的奖金,还能结识很多小伙伴和技术大佬。

【从用户到Committer,别样体验和收获】

· One min read

新晋Committer介绍#

大家好,我是qicz,非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer。我是一个“杂牌”程序设计师。杂牌,是因为那年那月自己也是创业一份子,那时候常常不得不选择不同的程序设计语言,以此练就杂牌大法,这过程中也有更多的机会可以去了解和接触很多品种的项目。我也是一个开源爱好者,喜欢“玩代码”,也因此会常在开源社区得瑟,个人一直秉承着开源理念,也搞过好几个开源项目。在社区常有很多好玩的有意思的开源项目,而Apache ShenYu就是其中之一。下面,我简单的跟大家分享一下,在参与Apache ShenYu社区这段时间的感受。

一、心路历程#

​ 了解到Soul是很早的时候了,正式接触Apache ShenYu是今年9月份的时候,那时刚收到了公司的网关需求,需要很短的时间掌握且要出东西。

​ 对于网关类项目,之前也有研究过比如Spring Gateway, Kong等。经过这段时间的研究并不断的参与到Apache ShenYu项目中,对它的设计理念非常的认可——插件化,所有的一切都是基于插件完成的。虽然类似Kong这样的网关也是支持插件的,但是lua搞起来是真的不好玩啊。另外一个就是Apache ShenYu的文档也是非常的丰富,把核心的设计,还有一些插件的原理都讲解的非常细致。Apache ShenYu是Java实现的,作为杂牌设计师,我还是很稀饭的。但尽管如此,研究它也真的是很痛苦的,第一次看到Apache ShenYu的源码时就非常的头大,那模块分的又细又多。

​ 万事开头难吧,有了好的开头可能就顺利了。我的开头是关于crossfilter的处理,把写在代码中的配置放到外置的配置文件中去。回想第一次提交pr的过程,真的是太磨人了,直到现在都觉得太痛苦了。

二、提供Pull Request#

​ 首先,所有的issue,pr,email都要使用英文。有些时间没有用英文写东西了,很多时候自己写了,都不敢相信和确定自己写的是不是有问题,估计很多时候都搞了中式英文了。不过以自己多年创业经验来说,一切都是纸老虎,很多时候只要坚持做下去,就会越来越好了。直到现在,不断的使用英文整理各类东西,已经越来越游刃有余了。乐哉!美哉!妙哉!

​ 另一个,每次提交pr的checkstyle和test,也是很磨人。因为源码有很严格的规范,从注释到换行,到标点都有要求。从上大学开始接触程序设计,因为导师要求我们必须注意编码风格,所以直到今天一直严格要求自己的编码,不断的操练我的代码洁癖技能。自认为自己的编码很规范了,但是在第一次pr的时候是真的被打败。一方面是流程也不是很清楚,再者因为模块非常多,本地打包checkstyle非常慢,而很多问题需要完整的执行打包流程才能暴露。记得最久的一次,既然花了差不多2个小时。

​ 这过程是真的太痛苦了。不过经过多次的尝试,第一个pr成功了。艰难的开头算是结束了。但是从个人角度是非常支持和赞成的,如果没有这样的细致的要求,何以更好的建设这项目和社区,并以此为基础去帮助和服务更多的小伙伴。

三、社区与公司结合#

​ 在不断对接公司的需求的过程中,对Apache ShenYu的研究也在不断的深入。开始做一些定制的开发,这过程中又不断的发现了其他的bug,于是有了第二个第三个和更多个pr。这过程中,很多时候是周末或者熬夜完成的,是真的很累,但还是非常有成就感的,尤其自己的pr解决了实际的需求,同时得到的社区的认可的时候,真的是成就感满满的。

​ 随着时间的推移,现在对Apache ShenYu已经有很深刻的认识,在未来自己也会尽全力在闲暇投入到社区的建设中,集合实际的需求,不管完善和丰富各类特性的设计和研发,坚持开源的初衷——源自社区回馈社区,为社区做出更多的贡献,与社区一同成长。

【Apache ShenYu(incubating)新晋PPMC】

· One min read

新晋PPMC介绍#

社区贡献#

  • 深度参与Apache ShenYu插件体系的开发(GRPC插件等)。

  • 践行Apache Way,活跃在社区,帮助他人,积极参与源码活动与官网文档建设。

社区体验#

  • 社区大于代码:营造好一个好的社区氛围是很重要的,比写代码还要重要。Apache ShenYu(incubating)社区也在不断的改进,不断的完善,尽可能的让新人参与进来,降低门槛。

  • 决策透明公开:不论是社区发展,还是功能开发,还是用户问题都会以邮件列表公开并存档。

  • 平等与尊重:专注于技术社区的交流,你的贡献决定你的权威。

  • 开阔视野:不满足于日常工作中的CRUD,参与开源,你的代码会被review,看看什么是好的代码,了解更多开源项目,提升个人技术能力。

  • 贡献无大小:不论你是完成了核心功能开发,还是编写测试案例,还是建设官网,修改文档,这些贡献都是一样的,都会得到社区的认可。

【从用户到Committer,参与Apache ShenYu社区并不遥远】

· One min read

新晋Committer介绍#

大家好,我叫唐震,目前在多点Dmall中间件工作,工作方向是分布式任务调度和消息中间件。非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

一、初识Apache Shenyu社区#

​ 今年年初,我在调研API网关期间了解到Apache ShenYu网关(以下以ShenYu指代Apache ShenYu (incubating))。ShenYu有着高性能、多协议、易扩展、响应式的特性,并且已经提供了多种插件,开箱即用,非常有潜力,就想着学习一下。

​ ShenYu除了官方提供的文档之外,还有很多社区的小伙伴提供的源码解析,在快速使用的基础上也能快速了解实现原理。社区十分活跃,大家积极上报和主动修复遇见的bug,一起讨论新的想法,帮助新朋友融入社区。起初使用时遇到的问题,提出issue或者在社区交流区中咨询都会有社区的朋友积极解答疑惑。这些文档和社区朋友们帮助我快速的上手ShenYu网关,同时也让我感受到ShenYu社区友好积极的氛围。

二、开源并不遥远#

​ 在刚开始阅读ShenYu源码的时候,看到一处代码有点冗余,可以进行精简,基于此我想建立一个issue,又担心这个优化太小不会被社区接纳。纠结了一下,还是参照之前的issue格式建立了一个issue表达我的想法。一小会儿就收到了社区的反馈,鼓励我提交PR来优化这段代码。我跟着社区的贡献指南,一步一步的完成了这个小优化,新的PR很快就合并了,并在Contributor列表中看到了自己。这是从普通用户向Contributor的转变,虽然很简单,但是对自己的激励很大,也让我感受到开源并不遥远。

​ 这之后,我对ShenYu的代码越来越熟悉,各个模块之间的关系脉络也逐渐梳理清楚,我从项目中学习到了不少优雅的设计思想,期间偶尔会发现一些bug、可以优化的代码和功能,我主动提出issue修复和完善这些问题,社区的Committer每次都会非常细致的review代码,给出一些改进的建议。后面我也参与了社区官网的建设,编写和完善相关文档。

​ ShenYu社区是开放、包容的,经常会发布一些任务,其中就有很多适合新手的任务,其实是为了帮助更多的同学融入到社区来,大家可以关注社区的邮件、issue、微信交流群等领取任务,有一个目标去完成,也能更快的熟悉项目。同时,社区有开放的周例会,大家都可以参加,能够了解到ShenYu目前的功能开发进度,以及社区后续的规划。

​ 在成为Committer后,除了继续跟进处理社区的issue外,我会也更多地主动思考和参与到一些新功能的开发中来,努力为社区做出更多的贡献,与社区一同成长。

三、给新人的一些建议#

对于希望参与到开源的朋友,以下有一些小的建议:

  • 从官方文档开始,先把项目的主要功能使用一下,有一个整体的认识。然后在参考社区的一些源码解析文章,了解内部实现的细节。刚开始可能会有一些小困难,可以从简单的小issue开始,逐步参与到社区的贡献中来。
  • 大胆提出你的想法,不管是代码结构、新的功能、使用上的疑问,都可以提出。贡献的形式不只限于代码,还包括文档、积极参与功能的讨论、帮助其他朋友解答疑问等等。
  • 积极关注社区,领取社区发布的任务,对于实现上的疑问可以多与社区其他同学沟通。

【发布Apache首个版本-2.4.0】让API网关变得简单

· One min read

【Apache ShenYu(incubating) 2.4.0】: 让API网关更简单#

声明:本文中的Apache ShenYu 都指的是 Apache ShenYu (incubating) 本人作者:肖宇 Apache ShenYu(incubating) Founder && PPMC 2.4.0 Release Manager : 张永伦 Apache ShenYu(incubating) PPMC && Apache ShardingSphere PMC

Apache ShenYu网关是原 Dromara/soul 网关捐献给Apache基金会后改名而来, 此次发布的 2.4.0 版本是 Apache ShenYu 网关进入Apache孵化器后的首个版本。这个版本涉及很多新功能的增加, 项目名称,包名以及maven依赖坐标的变更。

Apache ShenYu 是什么?#

Apache ShenYu是使用Java reactor编程方式开发的,具有异步高性能跨语言等特性的 API 网关。 在流量控制方面,有精美的Admin控制台,能够精准动态控制流量,满足复杂的业务场景。 在功能方面,它使用插件化的设计思想,支持许多常见的协议:如 http/httpsDubboSpring CloudGRPCMotanSofaTars 等。 同时内置十分丰富的功能插件,如 熔断限流鉴权黑白名单防火墙监控参数更改等等插件。其架构图如下:

流量控制#

对流量的控制是网关的灵魂,针对流量控制,Apache ShenYu 设计了选择器规则 2个概念,来控制流量。

选择器规则Apache ShenYu 网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。

一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的一级筛选,规则就是最终的筛选。

对一个插件而言,我们希望根据我们的配置,达到满足条件的流量,插件才会被执行。

选择器和规则就是为了让流量在满足特定的条件下,才去执行我们想要的,这种规则首先要明白。

插件、选择器和规则执行逻辑如下,当流量进入到Apache ShenYu网关之后,会先判断是否有对应的插件,该插件是否开启;然后判断流量是否匹配该插件的选择器。

然后再判断流量是否匹配该选择器的规则。如果请求流量能满足匹配条件才会执行该插件,否则插件不会被执行,处理下一个。

Apache ShenYu网关就是这样通过层层筛选完成流量控制。其流程图如下 :

流量筛选#

流量筛选,是选择器规则灵魂,对应为选择器与规则里面的匹配条件(conditions),根据不同的流量筛选规则,我们可以处理各种复杂的场景。

流量筛选可以从Header, URI, Query, Cookie 等等Http请求获取数据,

然后可以采用 Match=SpELRegexGroovy等匹配方式,匹配出你所预想的数据。

多组匹配添加可以使用And/Or的匹配策略。上述都是采用SPI的设计思想,用户可以自主进行扩展 :更多的请查看 : https://shenyu.apache.org/zh/projects/shenyu/selector-and-rule/

其过程图如下 :

数据同步与缓存#

为了提升网关的性能Apache ShenYu 网关会将所有的流量控制规则缓存在JVM 内存里面。在集群部署/分布式场景中,Apache ShenYu 自主研发了一套 将 Admin 控制台的数据,远程同步到每一个 Apache ShenYu 网关节点 JVM内存 的方案

每一种方案,采用 SPI 设计思想,以供用户灵活的选择。目前支持的方案有 HttpLongPull, Websocket, Zookeeper, Nacos, Consul, ETCD。 其整体流程如下 :

Admin控制台#

为了方便用户快速便捷的控制流量以及网关的所有功能特性,Apache ShenYu 提供了 一个十分精美的Admin控制台,用户可以中英文切换,在这上面,可以随意的控制流量启停插件配置不同的参数与策略,这些操作更改通过上述的数据同步原理,同步到网关的 JVM内存。其后台示意图如下:

菜单/数据权限#

网关的后台管理是十分重要的,为了针对企业级的用户,跨部门应用代理,Apache ShenYu设计了一整套的权限控制体系,它包含按钮级别的菜单权限,以及行数据级别的数据权限。并且这些权限控制在 Admin控制台 自主自动可配。

协议代理#

协议代理是网关最核心的功能,目前 Apache ShenYu 支持 http 转成 http/httpsWebsocket,DubboSpring CloudGRPCMotanSofaTars 等协议的转换,未来将支持 TCP, MQTT,MQTT 等协议。

Divide插件#

Divide插件,是用来专门代理 http/https/websocket 等方式请求 Apache ShenYu 网关的插件。 它具有 负载均衡流量预热, 节点发现超时重试超时控制 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 -->Divide插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/http-proxy/

<dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-divide</artifactId>    <version>${project.version}</version></dependency><dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-httpclient</artifactId>    <version>${project.version}</version></dependency>

Dubbo插件#

Dubbo插件,是Apache ShenYu网关将 http/https 请求转换成 dubbo协议的插件 。 它采用了Dubbo泛化调用的机制,整合了 Dubbo的客户端,具有服务发现负载均衡 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> dubbo插件将其设置为 开启,并且配置上注册中心, 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/dubbo-proxy/

 <!-- apache shenyu alibaba dubbo plugin start--> <dependency>   <groupId>org.apache.shenyu</groupId>   <artifactId>shenyu-spring-boot-starter-client-alibaba-dubbo</artifactId>    <version>${project.version}</version> </dependency> <!-- apache shenyu apache dubbo plugin start--> <dependency>   <groupId>org.apache.shenyu</groupId>   <artifactId>shenyu-spring-boot-starter-client-apache-dubbo</artifactId>    <version>${project.version}</version> </dependency>

SpringCloud插件#

SpringCloud插件,是Apache ShenYu网关代理 SpringCloud微服务业务的插件 。 它整合了 SpringCloud的注册中心,以及负载均衡服务,实现了服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> SpringCloud插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/spring-cloud-proxy/

 <dependency>   <groupId>org.apache.shenyu</groupId>   <artifactId>shenyu-spring-boot-starter-plugin-springcloud</artifactId>    <version>${project.version}</version> </dependency>

GRPC插件#

GRPC插件,是Apache ShenYu网关将 http/https 请求转换成 GRPC协议的插件 。 它整合了 GRPC 客户端,实现了 GRPC服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> GRPC插件将其设置为 开启。 更详细的介绍请看 :https://shenyu.apache.org/zh/projects/shenyu/grpc-proxy/

 <dependency>   <groupId>org.apache.shenyu</groupId>   <artifactId>shenyu-spring-boot-starter-plugin-grpc</artifactId>    <version>${project.version}</version> </dependency>

Tars插件#

Tars插件,是Apache ShenYu网关将 http/https 请求转换成 Tars协议的插件 。 Tars是腾讯开源的 RPC框架, 该插件整合了 Tars-JAVA 客户端,实现了 Tars服务的代理。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Tars插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/tars-proxy/

  <dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-tars</artifactId>     <version>${project.version}</version>  </dependency>

Sofa插件#

Sofa插件,是Apache ShenYu网关将 http/https 请求转换成 Sofa-RPC协议的插件 。 它采用了Sofa泛化调用的机制,整合了 Sofa-RPC的客户端,具有服务发现负载均衡 等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> sofa插件将其设置为 开启,并且配置上注册中心。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sofa-proxy/

  <dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-sofa</artifactId>     <version>${project.version}</version>  </dependency>

熔断限流#

Hystrix插件#

Hystrix插件,是Apache ShenYu网关整合Hystrix框架,提供请求熔断的功能,Hystrix熔断参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Hystrix插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/hystrix-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-hystrix</artifactId>   <version>${project.version}</version></dependency>

Sentinel插件#

Sentinel插件,是Apache ShenYu网关整合Sentinel框架,提供请求熔断限流的功能,Sentinel熔断限流参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Sentinel插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sentinel-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-sentinel</artifactId>   <version>${project.version}</version></dependency>

Resilience4j插件#

Resilience4j插件,是Apache ShenYu网关整合Resilience4j框架,提供请求熔断限流的功能,Resilience4j熔断限流参数可动态化配置。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Resilience4j插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/resilience4j-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-resilience4j</artifactId>   <version>${project.version}</version></dependency>

RateLimiter插件#

RateLimiter插件,是Apache ShenYu网关使用redis,提供请求集群限流的功能,限流算法策略有:令牌桶算法,并发限流漏桶算法滑动窗口算法。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> RateLimiter插件将其设置为 开启,并且配置上redis。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/rate-limiter-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-ratelimiter</artifactId>   <version>${project.version}</version></dependency>

安全/权限认证#

Waf插件#

Waf插件,是Apache ShenYu网关,用来对流量实现防火墙,主要用来拦截非法请求,或者异常请求,并且给与相关的拒绝策略,它提供了黑白名单配置的功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Waf插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/waf-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-waf</artifactId>   <version>${project.version}</version></dependency>

Sign插件#

Sign插件,是Apache ShenYu网关,用来对请求进行签名认证。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> Sign插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/sign-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-sign</artifactId>   <version>${project.version}</version></dependency>

JWT插件#

JWT插件,是Apache ShenYu网关,是针对 http 请求头的 token 属性或者是 authorization 属性携带值进行鉴权判断,兼容 OAuth2.0。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> jwt插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/jwt-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-jwt</artifactId>   <version>${project.version}</version></dependency>

OAuth2插件#

OAuth2插件,是Apache ShenYu网关,使用 Webflux OAuth2客户端实现,用于支持 OAuth2 协议。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> oauth2插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/oauth2-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-oauth2</artifactId>   <version>${project.version}</version></dependency>

个性化处理#

Rewrite插件#

Rewrite插件,是Apache ShenYu网关,支持使用正则表达式来重写URI的插件。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> rewrite插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/rewrite-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-rewrite</artifactId>   <version>${project.version}</version></dependency>

Redirect插件#

Redirect插件,是Apache ShenYu网关,将请求进行重定向的插件,支持网关内部接口与外部地址。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> redirect插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/redirect-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-redirect</artifactId>   <version>${project.version}</version></dependency>

Request插件#

Request插件,是Apache ShenYu网关容许用户对请求参数请求头 以及 Cookie 进行添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> request插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/request-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-request</artifactId>   <version>${project.version}</version></dependency>

Context-Path插件#

Context-Path插件,是Apache ShenYu网关,容许用户对请求路径上的 Context-Path,进行 添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> context_path插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/context-path-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-context-path</artifactId>   <version>${project.version}</version></dependency>

Param-Mapping插件#

Param-Mapping插件,是Apache ShenYu网关,容许用户对请求体中的 Body,进行 添加修改删除字段等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> param_mapping插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/param-mapping-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-param-mapping</artifactId>   <version>${project.version}</version></dependency>

ModifyResponse插件#

ModifyResponse插件,是Apache ShenYu网关,用来对请求响应体中的 响应头,状态码响应内容,进行 添加修改删除等功能。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> modifyResponse插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/modify-response-plugin/

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

可观测性#

Monitor插件#

Monitor插件,是Apache ShenYu网关,使用 prometheus来完成对请求量QPS, JVM等相关metrics进行监控的插件。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> monitor插件将其设置为 开启, 并且配置 prometheus相关参数。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/monitor-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-monitor</artifactId>   <version>${project.version}</version></dependency>

Logging插件#

Monitor插件,是Apache ShenYu网关,容许用户日志中打印本次请求信息,包含 请求路径请求方法请求参数响应头响应体等信息。用户想要使用它,请在网关添加如下依赖, 然后在 Admin控制台 --> 插件管理 --> logging插件将其设置为 开启。 更详细的介绍请看 : https://shenyu.apache.org/zh/projects/shenyu/logging-plugin/

<dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-logging</artifactId>   <version>${project.version}</version></dependency>

下一个版本规划#

  • RPC框架灰度发布增强,包含 SpringCloudGRPCDubboSofa-RPCTars等。

  • 新增ShenYu-Agent模块,打造网关metrics, tracing, logging 等可观测性体系。

  • 自定义插件动态加载,方便用户快速,不停机扩展与更新。

  • 集成测试 + 单元测试 全面覆盖。

社区#

Apache ShenYu 是完全由国人主导的自主性社区开源项目,目前处在高速发展时期, 功能开发文档完善BUG修复 等大量的事情需要完成。 Apache ShenYu 社区遵循 Apache Way的社区理念,打造一个完全开放治理的社区。 每半个月,会进行一次全体社区会议,社区的committers,contributors, users都会参与其中, 在会议上大家可以畅所欲言,提出自己的观点和看法,比如对不同的功能,不同的代码进行讨论,最好达成一致性的观点。 在Apache ShenYu 社区中,我们推崇邮件列表 > Github Issue > 微信群的沟通优先级的原则。 主要的目的是让每一个问题,没一个观点,都有记录存档,更好的帮助他人,以推进社区的可持续发展。

【毕业一年我是如何成为Apache ShenYu Committer】

· One min read

新晋Committer介绍#

大家好,我叫刘良,目前在招银网络科技担任软件开发工程师。非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

了解开源#

去年毕业后,觉得自己的技能还远远不够,所以平常也在不断学习。在学习的过程中,有一位老师提供了参与开源项目的机会。刚开始的想法是:参与开源项目可以提升自己的技能,也利于找工作,抱着这样的想法就加入其中了。

参与的开源项目是Apache ShenYu(incubating),这是一个异步的,高性能的,跨语言的,响应式的 API 网关。在社区交流群中,里面有好多积极的同学,大家积极的讨论Issue和自觉发现Bug。

参与开源#

我第一个任务是添加测试案例。任务通常是以issue的形式发布,如果你感兴趣,就在issue下面进行回复。幸运的是,官方社区提供了一个操作文档,按照上面的步骤来做就可以,主要是fork项目到自己的仓库,然后拉到本地,在本地创建对应的issue分支,然后才是实际写代码的过程。

第一个任务是为实体类写单元测试,这个也不知道咋弄,也觉得奇怪,实体类还需要写单元测试?那就只能开始上网google了,解决办法是通过反射调用get/set方法,完成之后就将自己写完的代码提交上去了,并且被合并了。这就是我在开源项目中贡献的自己的第一个pr,从此我也是开源项目的贡献者了,哈哈哈。

后面又做了其他的任务。第二次做的时候,又回头看了下自己第一次提交的代码,发现跟我提交上去的不一样了,查看了下git的提交记录,发现自己的代码被committer重构了。仔细看了下自己的代码和重构后的代码,发现:嗯,这样写法是要更优雅一些,学习了,默默膜拜大佬。

在持续的参与过程中,对Apache ShenYu(incubating)项目有了更深的理解,对开源文化也有了更多认识。

Apache ShenYu(incubating)的committer会经常通过邮件、issue、社区群发布任务。我注意到有一个关于gRPC优化的功能还没有人做,然后准备就去领这个任务。但是,到现在我还记得,在当时还是犹豫了很久,这个功能是要做啥都不知道,我能搞定吗?gRPC都没有用过,我还能去优化?在不断的怀疑和否定自己中......这个功能是项目中比较核心的一块,机会难得,要不先试试?最后,终于踏出了一步,去完成这个任务。

接下来的过程,就是如何解决这个问题。这是一个很具体的技术问题,就不展开了,主要说说自己的感受。遇到问题,要先分析分析,这个问题具体是什么,要从哪儿开始解决,现有的方案为什么不行,最后要达到什么结果,还要多与其他人沟通。我在解决这个问题的时候,也经常在跟Apache ShenYu(incubating)的PPMC沟通,讨论自己的方案是否可行。在调研分析的过程中,也时时打退堂鼓,因为这个问题对我来说,还不太好做。不过,Apache ShenYu(incubating)的PPMC也一直在鼓励我:这个没有时间限制,你可以慢慢研究,不明白的地方,还可以跟大家讨论。就这样,一步步的做,不断请教,最终还是解决了这个问题,提交的代码被项目成功合并。

再到后面,开始参加Apache ShenYu(incubating)的周例会,了解其他人在做什么,了解接下来的发展计划,也了解到了更多的开源文化。自己也在Apache ShenYu(incubating)的官网建设中做出了更多的贡献。

在Apache ShenYu(incubating)社区的体验#

前面一直在讲述自己的开源经历,其实这也是个人的真实内心活动,也是一个成长的过程。自从接触到开源以来,慢慢的感受到了开源的更多魅力,Apache ShenYu(incubating)社区的良好氛围。

  • 社区大于代码:营造好一个好的社区氛围是很重要的,比写代码还要重要。Apache ShenYu(incubating)社区也在不断的改进,不断的完善,尽可能的让新人参与进来,降低门槛;
  • 决策透明公开:不论是社区发展,还是功能开发,还是用户问题都会以邮件列表公开并存档;
  • 平等与尊重:专注于技术社区的交流,你的贡献决定你的权威;
  • 开阔视野:不满足于日常工作中的CRUD,参与开源,你的代码会被review,看看什么是好的代码,了解更多开源项目,提升个人技术能力;
  • 贡献无大小:不论你是完成了核心功能开发,还是编写测试案例,还是建设官网,修改文档,这些贡献都是一样的,都会得到社区的认可。

给新人的一点建议#

如果有对开源感兴趣,但是还没有参与过的朋友,你们是否存在这些问题呢?

  • 自己提的问题太简单,会不会显得自己没有水平?不是的,大家就技术讨论,自己提出的问题准备充分,有更多背景信息,社区的人是很乐意回复你,给你解惑。
  • 新人不知道怎么参与?社区提供了相关文档,按照操作来,就可以参与进来。也有新手任务可以直接参与。
  • 没有时间啊?社区的发展都是个人投入,没有商业利益,成员都是空余时间参与其中,相信你也可以。
  • 问题太难,不能解决?多和社区的人讨论,这就是在提升自己的技能。

【技术老兵的开源之路】

· One min read

个人介绍#

大家好,我是段海波,github账号haibo-duan,非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识Apache ShenYu#

在去年的一次源码阅读活动中,我第一次听说了Dromara开源社区的Soul网关正式进入Apache基金会孵化器并改名叫ShenYu的故事。 由于ShenYu(神禹)是第一个以中国传统文化命名的开源项目,而如何命名又是程序员最头疼的事情,因此,在好奇心的驱使下,我关注了ShenYu的公众号。在此后,我了解到ShenYu不仅具备高性能、多协议、易扩展的特性,还提供了各种开箱即用的插件,抱着学习的心态,我在github上fork了ShenYu的源码,正好ShenYu官网的文档也非常丰富,许多文档对技术细节也描述得非常详细。 于是根据文档的描述,订阅了ShenYu的邮件,并尝试能否参与到社区的建设中来。

我的开源之路#

在关注社区的过程中,有一次,社区组织了一次代码清洁活动,旨在对当前shenyu的代码进行清洁和优化。我看了一下这个task的要求并不难,于是,抱着试一试的心态,我按照代码规范对一些代码进行了优化之后,尝试提交了第一个PR。 万事开头难,实际上在第一个PR中需要学习的东西还是挺多的,包括PR的格式、代码的分支、以及提交的流程等。幸好这一切在贡献者指南中描述得非常详细。不过让我感触最深的就是ShenYu的checkstyle, 这是一个非常严格的规范,包括注释、空格都有要求,虽然我平时已经很注意代码规范了,但是一开始在这个checkstyle上也会有点小痛苦。 不过这个过程很快就会适应,毕竟,经过统一checkstyle之后的代码看上去让人极度舒适。

在有了从0到1的第一个PR之后,后续的过程就轻松很多了。我发现每次提交PR本地打包的过程中,最耗时的就是执行单元测试用例。我发现还有部分代码没有提供单元测试代码。因此,我决定从单元测开始参与,首先可以不用了解太多的源码,毕竟ShenYu数万行的存量代码也不是一两天就能掌握的。 此外,还能很快的看到结果。在写单元测试用例的过程中,不仅能发现源码中的bug,提升代码质量,还能更好的了解源码。

而恰好就在此时,工作上的一些问题也需要我对单元测试技术进行调研,当我了解到了junit5的新特性之后,我发现Shenyu采用的是junit4,于是我就有了一个大胆的想法,发邮件询问了ShenYu社区是否可以进行升级。在邮件中经过数轮讨论之后,我的提议被采纳,我也成为了这个task的负责人。而我在做这个任务的过程中,由于涉及的测试代码比较多,我分成了许多小的任务,也吸引了几位新的小伙伴一起加入。 此外,在做这个junit5升级的任务中,还发现了之前很多用例都用到了PowerMock,而在新版本的jdk中,PowerMock的兼容性存在问题。因此PowerMock也被移除掉了。

ShenYu社区是开放和包容的,在完成了这些任务之后,我对ShenYu的功能模块已经非常熟悉,除了能继续跟进社区的一些issue之外,还能够更多的结合自身的工作和经历去思考,并在周例会中提出自己的问题和想法。 恰在此时,我也收到了ShenYu社区的邀请,正式成为了committer,在我看来,成为Apache committer这不仅仅是一种荣誉,更多的也是一种责任。代表了社区的信任,需要更多的为社区做出贡献。成为Apache committer不是终点,仅仅是一个更高的起点。

我在Apahce ShenYu社区的体验#

在过去这段参与开源的过程中,有非常多的收获,有如下几点心得,提供给大家参考:

  • 从小事做起:开源社区的贡献并并没有区分大小,无论是重大功能改进,还是一行文档错误,对社区而言,这都是贡献。因此,勿以善小而不为。只要是有价值的贡献,社区都是欢迎的。

  • 积极参与,持续贡献:开源是个积沙成塔的过程,也许一次的贡献有限,但只要积极参与社区活动,无论是邮件中的方案讨论还是Review代码,只要坚持参与,就能获得提升。也许你不能像面对工作那样全部投入,但只要利用好业余时间,长期坚持,一样也能成功。

  • 参与邮件讨论,大胆提出想法:开源社区最大的特点就是民主、开放和透明。在这里,任何想法和建议都会被充分重视。如果你有一个好想法,你只需要发送一封邮件,就能在社区里和大家一起讨论,你的邮件总会得到回复,所有的讨论都是公开的,你可以看到大家对你问题的讨论过程。而在很多时候,讨论问题的过程往往比解决问题本身更有价值。

【Soul 网关发布里程碑的2.3.0版本】新增支持GRPC,Tars,Sofa协议

· One min read

距离上一次发布长达半年之久,在这半年的时间里,我与我的社区小伙伴们,做了太多太多的事情。 完成了将近 200 多次PR,发表了将近300 篇文章的源码解析,新增贡献者 120 多位,晋升了 7 位committer,并且全部获得正版 jetbrains 全家桶。非常感谢他们,在他们的帮助下,我们完成了非常多非常多的功能。

soul-admin(dashboard)#

admin是整个网关的控制面板,掌管所有的流量,规则的匹配。

  • 整合shiro框架,完成了用户按钮级别的权限控制。
  • 模板化插件,让用户无需感知前端页面,只专注于数据的配置。
  • admin整个后端的国际化,支持中英文切换。
  • 新增支持H2来存储数据。
  • admin界面的美观优化(表格,按钮)。
  • 新增单元测试,覆盖率达到百分之七十。

Soul 网关插件#

插件新增#

  • 新增GRPC插件,全面支持GRPC协议。
  • 新增Tars插件,支持腾讯 tars RPC协议。
  • 新增Sofa 插件,支持 sofa RPC协议。
  • 新增 Sentinel 插件,整合 sentinel框架的熔断限流功能。
  • 新增 Resilience4j 插件,整合 Resilience4j框架的熔断限流功能。
  • 新增 Rediect 插件,支持用户的重定向。
  • 新增 Context-path插件,支持用户自定义 context-path

插件优化#

  • Divide 插件:节点探活方式的优化,流量预热方式的优化。
  • Ratelimiter插件:新增并发,漏桶等不同的限流算法,供用户选择。
  • Sign 插件:修复必须设置 url 的 bug,新增是否验证 标记,可以用来做开放平台的URI认证。
  • Dubbo插件:新增 form 表单,URI 参数请求, 新增注册中心直连,参数校验等功能。

Soul Client#

soul-client只是提供一种快速接入网关的客户端,不是必须的。如果用户不使用,可以在soul-admin自行配置规则即可。#
  • spring-mvc客户端的优化,支持springspring-boot所有版本。
  • spring-cloud客户端的优化,支持springspring-boot所有版本。
  • dubbo客户端的优化,支持springspring-boot所有版本。
  • 新增 soul-grpc-client 支持 grpc-java用户接入。
  • 新增 soul-tars-client 支持 tars-java用户接入。
  • 新增 soul-sofa-client 支持 sofa-java用户接入。
在之前的版本中,只支持http方式接入,而这次新增注册中心方式接入。#

Soul 数据同步#

  • 修复 Nacos 配置中心同步未设置 NameSpace 的Bug。
  • 优化 Websocket 同步方式。
  • 解决 soul-admin 集群部署时候,Http 长轮询方式同步数据 Bug。

鸣谢#

这是一次具有里程碑意义的发布,也是 soul 网关,正式正规的一次变革,我们的 dashboard, 代码,文档, issue, PR 全部英文国际化,整个项目的单元测试覆盖率达到了百分之70。再次感谢你们的辛苦付出。虽然我们完成了非常多的功能(在上面我没有完全列举),但是在接下来,我们会有更多的挑战,我相信有你们在,这并不是我们的终点,而是我们腾飞起点。

加入我们#

目前 soul 处于高速发展阶段,如果你追求写高质量的代码,或者想深刻的理解API网关,或者享受开源的乐趣,结识很多优秀的朋友,欢迎大家加入我们的社区。