dubbo
dubbo copied to clipboard
有没有办法获取请求、响应报文大小?
版本: 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% 都是与大请求有关的报文,则可能导致普通的请求在数秒内得不到处理。
Dubbo 可以设置请求的最大报文大小,如果超过限制会直接报错防止阻塞网络
https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/properties/#protocol