Apache ShenYu 一款使用 Java Reactor 开发的响应式 API 网关。以其高性能,动态灵活的流量管控,热插拔,易部署等特性,开箱即用为用户提供整套全生命周期的 API 网关,包含 API 注册、服务代理、协议转换与 API 治理等功能。
图片
功能特性
「代理:」 支持 Apache® Dubbo™、Spring Cloud、gRPC、Motan、SOFA、TARS、WebSocket、MQTT
「安全性:」 Sign、OAuth 2.0、JSON Web Tokens、WAF 插件
「API治理:」 请求、响应、参数映射、Hystrix、RateLimiter插件
「可观察性:」 跟踪、指标、日志插件
「仪表板:」 动态流量控制,用户菜单权限的可视化后端
「扩展:」 插件热插拔、动态加载
「集群:」 NGINX、Docker、Kubernetes
「语言:」 提供.NET、Python、Go、Java客户端进行API注册
模块
shenyu-admin
: 插件和其他信息配置的管理后台
shenyu-bootstrap
: 用于启动项目,用户可以参考
shenyu-client
: 用户可以使用 Spring MVC,Dubbo,Spring Cloud 快速访问
shenyu-disruptor
: 基于disruptor的封装
shenyu-register-center
: shenyu-client提供各种rpc接入注册中心的支持
shenyu-common
: 框架的通用类
shenyu-dist
: 构建项目
shenyu-metrics
: prometheus(普罗米修斯)实现的 metrics
shenyu-plugin
: ShenYu 支持的插件集合
shenyu-spi
: 定义 ShenYu spi
shenyu-spring-boot-starter
: 支持 spring boot starter
shenyu-sync-data-center
: 提供 ZooKeeper,HTTP,WebSocket,Nacos 的方式同步数据
shenyu-examples
: RPC 示例项目
shenyu-web
: 包括插件、请求路由和转发等的核心处理包
快速入门
运行 Apache ShenYu Admin
> docker pull apache/shenyu-admin
> docker network create shenyu
> docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin
运行 Apache ShenYu Bootstrap
> docker network create shenyu
> docker pull apache/shenyu-bootstrap
> docker run -d -p 9195:9195 --net shenyu apache/shenyu-bootstrap
设置路由器
添加localKey: 123456
到标题。如果需要自定义localKey,可以使用sha512工具基于明文生成key并更新属性shenyu.local.sha512Key
。
curl --location --request POST 'http://localhost:9195/shenyu/plugin/selectorAndRules' \
--header 'Content-Type: application/json' \
--header 'localKey: 123456' \
--data-raw '{
"pluginName": "divide",
"selectorHandler": "[{\"upstreamUrl\":\"127.0.0.1:8080\"}]",
"conditionDataList": [{
"paramType": "uri",
"operator": "match",
"paramValue": "/**"
}],
"ruleDataList": [{
"ruleHandler": "{\"loadBalance\":\"random\"}",
"conditionDataList": [{
"paramType": "uri",
"operator": "match",
"paramValue": "/**"
}]
}]
}'
选择器和规则
根据HTTP请求标头,选择器和规则用于路由的请求。
选择器是第一条路线,它是粗粒度的,例如,在模块级别。
规则是第二条路线,例如模块中的方法级别。
选择器和规则只匹配一次,然后返回匹配项。所以最粗粒度的应该排在最后。
数据缓存和数据同步
图片
图片
功能截图
图片
图片
图片
传送门
❝
❞
推荐:
最全的java面试题库
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)