用 Dubbo 传输文件?被老板一顿揍!
Java后端技术
共 4894字,需浏览 10分钟
· 2022-04-14
往期热门文章:
Dubbo 怎么传文件?
void sendPhoto(File photo);
void sendPhoto(byte[] photo);
单连接模型问题
因为服务的现状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能整个网站都在访问该服务,比如 Morgan 的提供者只有 6 台提供者,却有上百台消费者,每天有 1.5 亿次调用,如果采用常规的 hessian 服务,服务提供者很容易就被压跨,通过单一连接,保证单一消费者不会压死提供者,长连接,减少连接握手验证等,并使用异步 IO,复用线程池,防止 C10K 问题。
<dubbo:service connections="1"/>
<dubbo:reference connections="1"/>
为什么 HTTP 协议“适合”传文件?
Feign 适合传输文件吗
interface SomeApi {
// File parameter
@RequestLine("POST /send_photo")
@Headers("Content-Type: multipart/form-data")
void sendPhoto (@Param("is_public") Boolean isPublic, @Param("photo") File photo);
// byte[] parameter
@RequestLine("POST /send_photo")
@Headers("Content-Type: multipart/form-data")
void sendPhoto (@Param("is_public") Boolean isPublic, @Param("photo") byte[] photo);
// FormData parameter
@RequestLine("POST /send_photo")
@Headers("Content-Type: multipart/form-data")
void sendPhoto (@Param("is_public") Boolean isPublic, @Param("photo") FormData photo);
// MultipartFile parameter
@RequestLine("POST /send_photo")
@Headers("Content-Type: multipart/form-data")
void sendPhoto(@RequestPart(value = "photo") MultipartFile photo);
// Group all parameters within a POJO
@RequestLine("POST /send_photo")
@Headers("Content-Type: multipart/form-data")
void sendPhoto (MyPojo pojo);
class MyPojo {
@FormProperty("is_public")
Boolean isPublic;
File photo;
}
}
feign-form
模块,该模块中提供了一些 FormEncoder。可无论哪种 FormEncoder 最后都是通过 Feign 封装的 Output 对象进行输出,不过这个 Output 对象却不是那种包装 Socket InputStream 作为中转发送,而是直接作为一个数据的载体,用一个 ByteArrayOutputStream 来存储编码完成的数据。@RequiredArgsConstructor
@FieldDefaults(level = PRIVATE, makeFinal = true)
public class Output implements Closeable {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//所有的数据在“编码”之后,仍然会写入到 ByteArrayOutputStream 这个内存 OutputStream 中
public Output write (byte[] bytes) {
outputStream.write(bytes);
return this;
}
public Output write (byte[] bytes, int offset, int length) {
outputStream.write(bytes, offset, length);
return this;
}
public byte[] toByteArray () {
return outputStream.toByteArray();
}
}
总结
往期热门文章:
1、我滴个乖乖,我复现了Spring的漏洞,害怕! 2、分布式锁用 Redis 还是 Zookeeper? 3、最适合晚上睡不着看的 8 个网站,建议收藏哦 4、String长度有限制吗? 5、14家互联网公司裁员(1-2月裁员清单) 6、Redis实现分布式锁的8大坑!切记! 7、请立即卸载这款 IDEA 插件! 8、Thread.sleep(0) 到底有什么用? 9、为什么不建议用try catch处理异常? 10、MySQL 为啥不能用 UUID 做主键?
评论
私人影院 “美女陪侍” 被曝光!摸胸摸腿可外出…
在中国,我们都清楚黄赌毒一直是严打对象。尤其是那些涉黄活动,虽然禁止,但还是有人铤而走险。最近,长沙的一家私人影院被曝光涉及黄色事件。这到底怎么了?一个叫王某的消费者揭露了这一事件。他一直单身,看到影院推出的“恋爱体验”套餐就心动不已,结果去了之后发现踩空了,令人心寒。听说,基础服务要369元,包括
逆锋起笔
0
一女子与一男子在阳台上打扑克,被邻居偷拍后...
近日网络上又发生了一起疑似黄色谣言的事件:一女子与一男子在阳台上打扑克,被邻居偷拍后上传到网上,引发广泛舆论讨论。根据网传视频显示,一名穿着吊带睡衣的女子与一名光着上身的男性在阳台上交谈,随后开始打起扑克牌。这一幕被邻居拍下并上传至网络后,引发了许多网友的关注和猜测,其中大部分涉及到了不当的假设。当
逆锋起笔
0
阿里P9被裁,赔偿82w
上一篇:人到中年, 发现同学间差距了,学医的高薪且稳定,进国企的工资不高但稳定,考公的工资不高,却生活滋润一女生发帖称:阿里老公被裁了。阿里巴巴公司的裁员消息如同晴天霹雳,打破了我们原本宁静的生活。那天,微信上突然弹出的消息,让我们感到震惊,仿佛一道闪电划破了平静的天空。“震惊”这个词,远远不足以描
开发者全社区
0
王宝弱搭配牛蓉?无底线模仿被索赔650万
如今的短视频领域,不管是处罚规则还是用户群体,已经相当成熟了。所以,不管是普通人想要成为网红,还是网红们想要吸引更多流量,都面临一定的挑战。要么内容得很吸引人,要么话题要足够受欢迎,不然想要持续吸引流量可不容易。于是,一些网红就想着走点歪门邪道,没流量就创造流量,没话题就自己制造话题...
这种行
逆锋起笔
0
用 Shader 实现旗帜飘扬动画效果
我觉得对于刚入门 3D 编程的朋友来说,如果能够完成代码创建模型数据->创建材质->编写Shader动画这一系列,想必会有满满的成就感。今天就用 Cocos Creator 的 utils.MeshUtils.createMesh 接口,带大家感受一下这个流程。这个流程不仅可以用于新手学
COCOS
2
用 R Bookdown 做本书,上线
我的写作基础设施:1、Typora2、Cloudflare R23、Picgo4、Obsidian5、GitHub6、mdnice本合集会一一介绍上述工具的安装、配置、使用等等还会介绍:服务器配置GitHub Pages、Cloudflare Pages、Vercel 的使用用 Jekyll、Boo
机器学习算法与Python实战
0
字节员工:35岁以后被裁员的,后来都走了哪条路?现在2-2,要不要利用最后一年拼命上个岸。
架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号该公众号已被封禁在当今竞争激烈的职场环境中,年龄并不总是一个决定性
源码共读
0
三年前端还不会配置Nginx,被老板打了,今天一口气学完
大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号回复1,加入高级Node交流群引言先来看看为何需要做请求负载。 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务
程序员成长指北
4