【问题记录】【Apache Camel】Apache Camel 报 413Request Entity Too Large
1 前言
Apache Camel 不知道大家有没有用过。它是一个基于企业应用集成模式(EIP)的强大开源集成框架。能够快速、轻松地集成,用于在各种系统之间消费或生产数据。说白了可以用于系统之间的不同方式的交互支撑。
最近出现一个问题,来记录一下。
2 问题现象
有客户反应说一个单子卡单了,发现 Camel 报错,报错类似如下:
从 HTTP 返回的状态码 413 来看,也就是客户端错误,再看报错信息,因为我们是 POST请求,说明请求体过大了。
再看一下这个单子,发现这个单子的明细特别多,将近1000行,那大概确实是请求体过长了。因为是生产环境,我们要迅速解决问题,那可以直接先手动的比如通过 Postman,Apifox 直接调用第三方系统的接口先把数据传过去对吧,先把客户的问题解决掉,别让人卡单,然后再慢慢看Camel 是哪里限制了大小,再做排查。
3 问题答案
Camel 这玩意之前也没研究过,也是一点点看源码,一点点分析出来的,主要就是改变组件 netty-http 组件的配置,花了半天时间,终于是解决了,我这里先贴下最后的解决办法,就加了下边三行加红的代码:
private void initContext() throws Throwable { Registry registry = camelContext.getRegistry(); registry.bind("RouteCacheManage", routeCacheManage); registry.bind("TemplateCacheManage", templateCacheManage); camelContext.setUuidGenerator(uuidGenerator); camelContext.setTracer(stargateTracer); camelContext.setRestConfiguration(buildRestConfiguration()); } private RestConfiguration buildRestConfiguration(){ // Rest 组件的配置 RestConfiguration restConfiguration = new RestConfiguration(); // 端口 restConfiguration.setPort(8888); // 路径 restConfiguration.setContextPath("/api"); // 采用的组件类型 restConfiguration.setComponent("netty-http"); // !!!就加了下边三行代码 Map<String, Object> map = new HashMap<>(); // 默认是 1048576(1024*1024)即1M 改成10M map.put("configuration.chunkedMaxContentLength", 10485760); restConfiguration.setConsumerProperties(map); return restConfiguration; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-08-16 【SpringBoot + Tomcat】SpringBoot 跟 Tomcat 的协同,Tomcat什么时候知道 SpringBoot 可以处理请求了或者 SpringBoot 什么时候告诉 Tomcat 我可以处理请求了?