Closed pitli closed 1 year ago
可以通过设置motan:protocol配置中的maxContentLength
来设置最大运行请求大小。比如demo中部分server配置就设置了这个参数.
这个配置项在restful协议中是在这里生效的。
@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这个参数的。
@rayzhang0603 这是我在启动后断点进入的截图,只有motan:basicService中的参数进入到这个工厂类中进行初始化了。
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"/>
按照这个配置可以正常修改maxRequestSize,非常感谢@rayzhang0603。但我还有个问题,看xml中都是protocol配置,原代码中也没有找到哪里会进行区分啊,为什么加在id为demoMotan的protocol中会起不到作用呢。
export="demoRest:8082,demoMotan:8805"
这里指明了用什么协议在什么端口对外提供服务。其中的demoRest和demoMotan都是protocol bean的id。
restful场景中使用的是demoRest
的protocol配置,所以需要在demoRest
中设置相关参数。
demoMotan
中配置的参数,只会在motan协议中生效的。
项目为motan+spring发布接口,通过接口上传文件时,如果文件大小超过10M,会导致TooLongFrameException,但在配置中无法修改该数据大小,修改spring的附件大小限制也无法解决该问题,通过排查,这个maxRequestSize在项目启动时便会按照默认大小10M配置,无法修改。所在包是motan-protocol-restful这个包引入的resteasy-netty这个包。