【发布时间】:2016-11-29 07:41:55
【问题描述】:
我有一个 hashMap 需要通过网络从服务器传输到客户端。现在,当大小增加超过套接字缓冲区提供的某个限制时,将引发以下异常。
原因:weblogic.socket.MaxMessageSizeExceededException:传入消息的大小:“3002880”字节超过了为协议配置的最大值:“3000000”字节:“t3”
在谷歌搜索时,我发现应该增加套接字大小,但这不是必需的,因为这不是一个很好的解决方案。
然后我尝试在使用“DeflaterOutputStream/InflaterInputStream”发送之前压缩 HashMap。但这里的挑战是“ObjectOutputStream”对象是由 weblogic 类创建的,并且应该在尝试创建 ObjectOutputStream 以使压缩工作时嵌入 deflater/Inflater 流。
有什么办法可以做到这一点吗?
还可以有一些方法来启用 weblogic 使用的 t3 协议的压缩以自动使用压缩。我已经对 t3 协议是否可能进行了一些研究,但似乎 t3 协议不支持这一点。但是我不确定一些新版本的 weblogic 是否支持这个。
我还考虑将 HashMap 分解为“套接字缓冲区大小”的块,但它需要更改现有设计,目前不推荐。
请分享您对此的看法。
【问题讨论】:
-
3000000 对你来说是一个神圣的限制吗?如果没有并且可以修改,您可以尝试以下操作,
System.setProperty("weblogic.MaxMessageSize", "BiggerValueAsString")。更多信息blogs.oracle.com/LuzMestre/entry/how_to_fix_weblogic_socket -
@patrik 实际上我们的团队不想寻求解决方案,因为只要我们有更多数据,就需要尽快设置大小
标签: java serialization hashmap compression weblogic