项目版本:
gateway:3.0.2
springboot:2.4.6

背景:
对接阿里云tts,gateway转发websocket请求,在字节流超过65536时,连接自动断开,跟踪源码发现,WebsocketSpec限制了单次发送消息的最大字节数,目前还未找到动态配置的方法,如果有大神找到了欢迎告知

解决方案:
思路就是在项目启动完成后直接拿到ReactorNettyRequestUpgradeStrategy和ReactorNettyWebSocketClient,把里面的maxFramePayloadLength,也就是最大帧有效负载长度,通过反射改为想要的长度,代码:


```java
@Component
public class GatewayRunner implements ApplicationRunner, ApplicationContextAware {@Value("${websocket.maxFramePayloadLength}")private Integer maxFramePayloadLength;private ApplicationContext applicationContext;@Overridepublic void run(ApplicationArguments args) throws Exception {Assert.notNull(maxFramePayloadLength, "maxFramePayloadLength Cannot be empty");ReactorNettyRequestUpgradeStrategy bean = applicationContext.getBean(ReactorNettyRequestUpgradeStrategy.class);Class<? extends ReactorNettyRequestUpgradeStrategy> aClass = bean.getClass();Field field = aClass.getDeclaredField("maxFramePayloadLength");field.setAccessible(true);field.set(bean, maxFramePayloadLength);ReactorNettyWebSocketClient bean1 = applicationContext.getBean(ReactorNettyWebSocketClient.class);Class<? extends ReactorNettyWebSocketClient> aClass1 = bean1.getClass();Field field1 = aClass1.getDeclaredField("maxFramePayloadLength");field1.setAccessible(true);field1.set(bean1, maxFramePayloadLength);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}
}

解决gateway转发websocket出现Max frame length of 65536 has been exceeded相关推荐

  1. Spring cloud网关gateway代理websocket报Max frame length of 65536 has been exceeded

    Spring cloud网关gateway代理websocket报io.netty.handler.codec.http.websocketx.CorruptedWebSocketFrameExcep ...

  2. netty : Max frame length of 65536 has been exceeded.

    文章目录 1. 背景 解决 1. 背景 netty刚刚学的,一个聊天室程序 界面如下: 代码如下: package com.myself.nettychat.config;

  3. gateway 转发weboskct 报错 ClassCastException

    使用环境: springcloud gateway 转发 websocket 报错 报错内容: 15:30:38.092 [http-nio-9999-exec-1] ERROR c.m.g.e.Gl ...

  4. sqlalchemy Specified key was too long; max key length is 767 bytes的解决办法

    sqlalchemy出现以下错误: sqlalchemy Specified key was too long; max key length is 767 bytes 原因 字符集设成了utf8mb ...

  5. MySQL5.6建索引时遇到 Specified key was too long; max key length is 767 bytes错误提示解决办法

    一.错误提示 Specified key was too long; max key length is 767 bytes: 二.原因分析 在数据库中,索引的字段设置太长了,导致不支持.[根本原因: ...

  6. 一招解决MySql Specified key was too long; max key length is 767 bytes

    背景 今天迁移环境上阿里云的DMS建表 CREATE TABLE `xxl_job_registry` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `reg ...

  7. Adjusted frame length exceeds 4096: 5637 - discarded 服务端解决

    解决服务端Adjusted frame length exceeds 4096: 5637 - discarded问题 1. 具体错误 2. 错误原因 2.1 长度格式问题 2.2 长度大小问题 3. ...

  8. hive的Specified key was too long; max key length is 767 bytes问题解决

    把hive 的metadata配置成mysql,执行命令时报以下错误 hive> show tables; FAILED: Error in metadata: MetaException(me ...

  9. hive 1.1.1 Specified key was too long; max key length is 767 bytes

    错误 hive> create table shop(locationid int,name string,cnname string) row format delimited fields ...

最新文章

  1. mixamo网站FBX模型带骨骼绑定动作库
  2. 元素多层嵌套,JS获取问题
  3. python的前端怎么实现_Bootstrap、Python、Flask 做简单的前端
  4. scrum敏捷开发工具实践分享
  5. 一文读懂JDK7,8,JD9的HashMap,HashTable,ConcurrentHashMap及他们的区别
  6. mysql冷备增量备份,MySQL备份与恢复之真实环境使用冷备(2)
  7. [转载]Android Layout标签之-viewStub,requestFocus,merge,include
  8. 甲骨文因超过90亿美元的NetSuite交易起诉Larry Ellison和CEO Safra Catz
  9. Shell script 笔记
  10. 周长相等的正方形面积一定相等_周长和面积一直是三年级孩子的易失分点,家长要把好关!...
  11. 职场动物进化手册-读后感
  12. 在pc计算机vga是什么意思,电脑上的VGA线是什么样的?图片
  13. 指数解读:恒生指数(Hang Seng Indexes)
  14. 抛弃光驱,让你的U盘变光驱,制作USB-CDROM,用U盘安装系统
  15. 天行健,君子以自强不息;地势坤,君子以厚德载物的解释
  16. 手机邮箱中的邮件里的链接的打开方式/app更改方法
  17. App地推营销成为趋势,破局增长数据赋能是关键
  18. Java程序员必修内功心法!(内功修炼第三层)
  19. 微信开发(三)创建菜单
  20. 第十章 DCEP简介

热门文章

  1. 手把手教你进行Pycharm活动模板配置
  2. 一桩VIM引发的血案
  3. 哈工大计算机系统大作业——程序人生-Hello’s P2P
  4. 公众号二维码怎么生成
  5. Android屏幕渲染
  6. Kaldi中 声纹识别的流程图
  7. 【GANs学习笔记】目录
  8. 你可能会读错的字大集合
  9. OPTA 7模式测试说明
  10. 中国剩余定理求解同余线性方程组(模数互素和非互素的情况)