网关
网关运行分析报告
网关运行分析报告 - 2025-02-15
网关运行分析报告 - 2025-02-22
网关运行分析报告 - 2025-02-28
1.shenyu网关内外网使用
2.shenyu网关的具体使用
记一次网关线上问题之icsp访问ERP
再次思考多套ak/sk同时访问同一资源路径问题
网关接入说明
网关接入说明补充
网关分配各系统命名
网关BUG及二开
网关管理端访问地址
修改requestBody与responseBody
shenyu工程理解
获取requestBody异步问题
shenyu工程部署
排查sign插件报错500问题
shenyu数据结构设计
shenyu网关请求过程
shenyu自定义插件
记一次网关线上问题----网关无法对外提供服务
网关插件更新报错问题
网关中grayTag的使用
Exceeded limit on max bytes to buffer : 262144
网关中Divide插件中Selector中Handler中配置丢失问题
网关请求下游系统时长记录
通用测试:获取网关的sign值
网关分发主数据设想方案
铁骑主数据分发机制完善
27.GTMS&ITMS与gateway的关系
28.ZPI与gateway的关系
26.网关验签场景
29.PC端空值,服务端正常请求
30.网关requestMaxSize值
31.跨系统跨语言日志链路追踪
32.网关异步分发讨论
33.网关LoggingConsole丢失日志排查
34.网关升级shenyu-admin
35.网关异步分发插件 - 接入文档
本文档使用「觅思文档专业版」发布
-
+
首页
shenyu工程部署
部署分admin与gateway两部分。 admin:提供管理端操作平台,如增删改查认证、插件等。 gateway:提供网关服务功能,如认证服务、转发服务等。 ## 1 admin部署 参考官方部署方法:https://shenyu.apache.org/zh/docs/deployment/deployment-package 由于官方部署文档描述清晰,这里就不过多重复描述。 调试websocket的话,需要放开连接限制,如下图  查看下启动日志,查看到服务启动成功即可。 ## 2 gateway部署 官方推荐:https://shenyu.apache.org/zh/docs/deployment/deployment-custom 按照官网推荐搭建了一个springboot工程,然后引入相关的jar包,yml配置文件可以参考源码配置,我是将该boot工程注册到nacos上,websocket设置成服务器上的配置,如下  如下着重介绍下gateway启动流程。工程启动流程如下  即该工程启动主要干了两件事,1:加载(可用的)插件,为什么说可用的呢?因为官方的插件有40多种,我们自建工程不需要那么多,因此搭建该工程的时候也不需要引入那么多插件的jar包。2:数据同步,这是什么意思呢?注意本工程的yml文件中是没有连接数据库的配置,但是有websocket的配置,即本工程所需要的数据都是从admin端的websocket push过来的,存入本地的缓存中。 ### 2.1 加载插件 工程启动后,优先去加载(可用的)插件,对应的jar包: ``` <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-gateway</artifactId> <version>${shenyu.version}</version> </dependency> ``` 工程源码如下:  ### 2.2 同步数据 该工程采用官方默认的方式:websocket,对应的jar包: ``` <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-sync-data-websocket</artifactId> <version>${shenyu.version}</version> </dependency> ``` 工程源码如下:  websocket连接成功如下,为什么这里需要列出来?阅读这部分源码可用了解原作者websocket的集成思想,同时为了解决admin端websocket放开连接控制处代码不安全的问题。截图如下:  该部分代码主要在ShenyuWebsocketClient.java文件,websocket连接成功后,开始同步数据,即执行方法: ``` public void onMessage(String result) { this.handleResult(result); } ``` handleResul()方法如下: ``` private void handleResult(String result) { LOG.info("handleResult({})", result); WebsocketData<?> websocketData = (WebsocketData)GsonUtils.getInstance().fromJson(result, WebsocketData.class); ConfigGroupEnum groupEnum = ConfigGroupEnum.acquireByName(websocketData.getGroupType()); String eventType = websocketData.getEventType(); String json = GsonUtils.getInstance().toJson(websocketData.getData()); this.websocketDataHandler.executor(groupEnum, json, eventType); } ``` WebsocketDataHandler.java文件如下: ``` public class WebsocketDataHandler { private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap(ConfigGroupEnum.class); public WebsocketDataHandler(PluginDataSubscriber pluginDataSubscriber, List<MetaDataSubscriber> metaDataSubscribers, List<AuthDataSubscriber> authDataSubscribers) { ENUM_MAP.put(ConfigGroupEnum.PLUGIN, new PluginDataHandler(pluginDataSubscriber)); ENUM_MAP.put(ConfigGroupEnum.SELECTOR, new SelectorDataHandler(pluginDataSubscriber)); ENUM_MAP.put(ConfigGroupEnum.RULE, new RuleDataHandler(pluginDataSubscriber)); ENUM_MAP.put(ConfigGroupEnum.APP_AUTH, new AuthDataHandler(authDataSubscribers)); ENUM_MAP.put(ConfigGroupEnum.META_DATA, new MetaDataHandler(metaDataSubscribers)); } public void executor(ConfigGroupEnum type, String json, String eventType) { ((DataHandler)ENUM_MAP.get(type)).handle(json, eventType); } } ``` 由此处代码可知:onMessage方法主要是从admin的websocket中同步数据,然后将同步的数据分类保存到这个map中EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP,查看ENUM_MAP的源码可知,同步的数据类型有 ``` public enum ConfigGroupEnum { APP_AUTH, PLUGIN, RULE, SELECTOR, META_DATA; ``` 即认证、插件、规则、选择器、元数据,这些数据也涵盖了gateway工程所有业务数据,不包含用户、权限数据。 自此gateway服务启动起来,一旦有请求进来,则从ENUM_MAP中取出数据进行处理。
李贤利
2022年9月20日 16:44
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期