dubbo icon indicating copy to clipboard operation
dubbo copied to clipboard

有没有办法获取请求、响应报文大小?

Open liuzhiguo630 opened this issue 3 years ago • 2 comments

版本: Dubbo 2.7x ~ 3.1.0

Dubbo 中用「input」「output」表示 InputBytesCount, OutputBytesCount ,但现在基本已经废弃了,只有 Dubbo 协议有 Input 字段,没有 Output。

获得请求、响应报文体积是判断要不要打印日志、判断是否网络阻塞的重要依据。不然就只能在序列化成 JSON 后才发现报文过大,白白浪费性能在序列化上。我们发现用 JSON.toJSONString() 序列化后有数 M 大小的响应内容,需要几百毫秒甚至数秒才能完成。

同时这个问题也怀疑与 #1784 #8513 有关系,都是发生了非常短暂的超时,Provider 端处理非常快,并且问题难以复现。显然是中间层网络的嫌疑最大,而网络阻塞又与 Dubbo 默认单条连接处理有关,与报文大小有关。

假设 Provider 突然来了几个响应内容非常大的请求,会导致网络包中 99.9% 都是与大请求有关的报文,则可能导致普通的请求在数秒内得不到处理。

liuzhiguo630 avatar Sep 21 '22 03:09 liuzhiguo630

Dubbo 可以设置请求的最大报文大小,如果超过限制会直接报错防止阻塞网络

AlbumenJ avatar Sep 23 '22 02:09 AlbumenJ

https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/properties/#protocol

AlbumenJ avatar Sep 23 '22 02:09 AlbumenJ