com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload() ERROR  Data length too large: 11557050, max payload: 8388608 java.io.IOException: Data length too large: 11557050, max payload: 838860

故障缘由:

  最近做一个功能,前端Spring MVC做Excel文件导入,前端仅负责接收上传数据,解析需交由后端Dubbo Provider解析并持久化到数据库,前端接收文件流,由于Dubbo无法直接对文件流进行传输,随将文件流转byte(能序列化)走Dubbo底层协议传输。

  起初小文件传输没有问题,但是文件超过8M后,出现本文顶端的异常,由Provider抛出,不难看出,Dubbo对传输的数据包做了8M限制,超限即抛异常,尽管这个问题阿里和当当的Dubbox已经放开了这个限制,详见(https://code.aliyun.com/alibaba/dubbo/commit/827769f8ad1e05f5b7caf0f09afe2aec344096cd      https://github.com/dangdangdotcom/dubbox/pull/33/files?diff=split),但是仔细想想,这并不符合Dubbo设计的初衷,Dubbo的长连接并不是为这种大数据包传输服务的,主要用于小数据包频繁调用,所以这个场景的设计就是有问题的。

如何解决?

  1、如果不想修改代码及其他结构,那没办法,要么升级Dubbo版本(这明显动作很大,有很多风险)

  2、将Excel文件内容拆成小于8M的N个文件

  3、大于8M的Excel文件前端接收后将文件流转换后的Byte做切割,切成小于8M然后挨个传输,但是Consumer和Provider必须保证头尾完整,Provider才能完整解析

  4、Excel大文件由Consumer接收后上传至指定FTP服务器,Provider从FTP服务器取回解析,这里也可用其他分布式文件服务器,或者放到Mongodb或Redis库,看自己设计。

  5、看项目架构及结构,直接由Consumer解析,但有些场景并不允许。

建议:

  个人倾向于上述建议第4条,本来就是分布式架构,跳过RPC传输大数据包,直接从第三方服务器取,这样减轻了Dubbo的压力,也不会占用某个连接对应的Provider节点带宽,给其他频繁的小数据包请求让路,这样更理想。

Dubbo Data length too large: 11557050, max payload: 8388608 传输数据超限的更多相关文章

  1. dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明

    工作中遇到以下报错信息 cause: java.io.IOException: Data length too large: 10710120, max payload: 8388608, chann ...

  2. 关于Dubbo异常之Data length too large

    最近几日发现生产环境项目打出的日志,每天都在30~50G以上,寻找多次发现问题: 首先查看日志只看到大批量的json数据输出,这是方法查询后的返回值输出,期初以为是自己打了logger,结果寻找多次, ...

  3. [翻译]MapReduce: Simplified Data Processing on Large Clusters

    MapReduce: Simplified Data Processing on Large Clusters MapReduce:面向大型集群的简化数据处理 摘要 MapReduce既是一种编程模型 ...

  4. [ html canvas getImageData Object.data.length ] canvas绘图属性 getImageData Object.data.length 属性讲解

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  5. Echart..js插件渲染报错 data.length<1?

    问题 getJSON提交 返回数据正常,在传入参数进行序列化,渲染报表时报错 option.data.length < 1. 分析  1.可能情况一: . 可自己明明是getJSON()把渲染放 ...

  6. 《MapReduce: Simplified Data Processing on Large Clusters》论文研读

    MapReduce 论文研读 说明:本文为论文 <MapReduce: Simplified Data Processing on Large Clusters> 的个人理解,难免有理解不 ...

  7. MapReduce: Simplified Data Processing on Large Clusters 翻译和理解

    MapReduce: Simplified Data Processing on Large Clusters 概述 MapReduce 是一种编程模型,用于处理和生成大型数据集的相应实现.用户定义一 ...

  8. [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构

    10.2 How would you design the data structures for a very large social network like Facebook or Linke ...

  9. C249: 'DATA': SEGMENT TOO LARGE“解决方法 | keilC51设置编译模式:SMALL,COMPACT,LARGE

    "Keil Cx51编译器提供三条编译模式控制命令:SMALL,COMPACT,LARGE,它们对变量存储器空间的影响如下. SMALL:所有变量都被定义在8051单片机的片内RAM中,对这 ...

随机推荐

  1. GPUImage的filter 响应处理链 的理解笔记

    GPUImage的filter的textures处理链式结构 两个最重要的的地方: 最重要的一个类GPUImageOutput(所有的filter的父类,其他也有继承它的,如GPUImageUIEle ...

  2. 深入分析Java的String类的方法与特点

    字符串是任何编程语言都必须支持的变量类型,有些编程语言是直接提供了原生的变量类型,有些编程语言则使用语法特性以 SDK 的形式提供支持.在Java编程平台中,对字符串的支持使用了后者的形式,就是通过在 ...

  3. 将某个日期字符串转换为java.sql.Date的类型

    import java.text.ParseException; import java.text.SimpleDateFormat; public class date { /** * @param ...

  4. 【论文:麦克风阵列增强】An alternative approach to linearly constrained adaptive beamforming

    作者:桂. 时间:2017-06-03  21:46:59 链接:http://www.cnblogs.com/xingshansi/p/6937259.html 原文下载:http://pan.ba ...

  5. 网页中嵌入百度地图报错:The request has been blocked,the content must served over Https

    网页中嵌入百度地图 1.进入百度地图开发平台:http://lbsyun.baidu.com/index.php?title=jspopular 2.获取密钥:http://lbsyun.baidu. ...

  6. 搭建vue开发环境及各种报错处理

    1.安装node.js 参考教程:http://nodejs.cn/download/ 我的是windows 64位系统,以此为例: (1)打开 http://nodejs.cn/download/ ...

  7. Bash的作业控制

    作业控制是bash Shell提供的一项强大功能,它允许你选择在前台还是后台运行程序,即作业. 1.开启bash的作业控制功能 #set -o monitor或#set -m 2.显示在后台运行的作业 ...

  8. AngularJS高级程序设计读书笔记 -- 指令篇 之 自定义指令

    2. 自定义指令(15-17 章) Module.directive(name, factory) 2.1 创建自定义指令的方法 Module.directive(name, factory) 示例 ...

  9. flask 扩展之 -- flask-moment

    一. 安装 $ pip install flask-moment 二. 初始化 from flask_moment import Moment moment = Moment(app) 三. 解决依赖 ...

  10. (6)javascript的程序控制结构及语句-----(1)条件判断

    程序控制结构及语句 编程就是将现实应用,转换为程序能够读得懂的语法语句.Javascript编程中对程序流程控制主要是通过条件判断语句.循环控制语句及continue.break来完成的,其中条件判断 ...