【解決方法】Dubbo報錯Data length too large,調整payload大小解決

翎野君發表於2024-06-03

問題:

Data長度超過設定引數的最大值

cause: java.io.IOException: Data length too large: 10008608, max payload: 8388608, channel: NettyChannel [channel=[id: 0x09396776, /...]]
java.io.IOException: Data length too large: 10008608, max payload: 8388608, channel: NettyChannel [channel=[id: 0x09396776, /...]]
    at com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload(AbstractCodec.java:49)
    at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:285)
    at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:77)
    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:39)
    at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalEncoder.encode

發現問題:

當dubbo服務提供層向消費層傳輸大資料容量的物件時,會受到Dubbo的限制。

原因

在Dubbo中,你可以增加"payload"引數來增加最大負載限制。在你的provider配置中,可以這樣設定:

<dubbo:provider payload="9391996" />
或者在具體的服務中進行配置:

<dubbo:service interface="your.interface" payload="9391996" />
這樣,payload就被設定為9391996,略大於你當前的資料長度。請小心處理這個配置,因為過大的payload可能會導致記憶體壓力增加。

解決問題:

第一種方案

修改提供方的dubbo配置, 在dubbo.properties 中增加如下(前提是你要在dubbo的配置檔案中,指定為下面這個apollo變數)

dubbo.protocol.dubbo.payload=11557050(預設為8M,即8388608)

第二種方案

在dubbo-provider.xml檔案配置

<dubbo:provider id="payload" payload="11557050"/>

本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支援。

首發連結:https://www.cnblogs.com/lingyejun/p/18227953

相關文章