weibocom / motan

A cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.
Other
5.89k stars 1.78k forks source link

NettyJaxrsServer中的maxRequestSize大小问题 #1032

Closed pitli closed 1 year ago

pitli commented 1 year ago

项目为motan+spring发布接口,通过接口上传文件时,如果文件大小超过10M,会导致TooLongFrameException,但在配置中无法修改该数据大小,修改spring的附件大小限制也无法解决该问题,通过排查,这个maxRequestSize在项目启动时便会按照默认大小10M配置,无法修改。所在包是motan-protocol-restful这个包引入的resteasy-netty这个包。

rayzhang0603 commented 1 year ago

可以通过设置motan:protocol配置中的maxContentLength来设置最大运行请求大小。比如demo中部分server配置就设置了这个参数.

这个配置项在restful协议中是在这里生效的。

pitli commented 1 year ago

@rayzhang0603

<motan:protocol id="demoRest" name="restful" endpointFactory="netty"/>

<motan:protocol id="demoMotan" name="motan" default="true" maxServerConnection="80000"
                maxContentLength="52428800" payload="52428800"
                maxWorkerThread="800" minWorkerThread="20"/>

<!-- 同时提供restful协议和motan协议 -->
<motan:basicService export="demoRest:8082,demoMotan:8805"
                    group="motan-demo-rpc" accessLog="false" shareChannel="true" module="motan-demo-rpc"
                    application="myMotanDemo" registry="registry" id="serviceBasicConfig"/>

这是我的motan-server.xml配置,这里已经配置了的,但是并不会生效。在解析motan:protocol标签时并不会进入这里,只有在解析motan:basicService标签时才会进入,但是这个标签没有maxContentLength这个参数的。

pitli commented 1 year ago

@rayzhang0603 0T`(PGH4EO2TCDVC{7YH{9M 这是我在启动后断点进入的截图,只有motan:basicService中的参数进入到这个工厂类中进行初始化了。

rayzhang0603 commented 1 year ago

url会分别从protocol、basicService、service配置中合并参数的。把maxContentLength加到demoRest这个protocol中试一下,这个protocol才是对restful协议的配置。

<motan:protocol id="demoRest" name="restful" endpointFactory="netty" maxContentLength="52428800"/>

<motan:protocol id="demoMotan" name="motan" default="true" maxServerConnection="80000"
                maxContentLength="52428800" payload="52428800"
                maxWorkerThread="800" minWorkerThread="20"/>

<!-- 同时提供restful协议和motan协议 -->
<motan:basicService export="demoRest:8082,demoMotan:8805"
                    group="motan-demo-rpc" accessLog="false" shareChannel="true" module="motan-demo-rpc"
                    application="myMotanDemo" registry="registry" id="serviceBasicConfig"/>
pitli commented 1 year ago

按照这个配置可以正常修改maxRequestSize,非常感谢@rayzhang0603。但我还有个问题,看xml中都是protocol配置,原代码中也没有找到哪里会进行区分啊,为什么加在id为demoMotan的protocol中会起不到作用呢。

rayzhang0603 commented 1 year ago

export="demoRest:8082,demoMotan:8805"这里指明了用什么协议在什么端口对外提供服务。其中的demoRest和demoMotan都是protocol bean的id。

restful场景中使用的是demoRest的protocol配置,所以需要在demoRest中设置相关参数。

demoMotan中配置的参数,只会在motan协议中生效的。