开发者社区> 问答> 正文

消息服务的超大消息传输是什么?



问题背景


阿里云消息服务MNS的队列的消息大小最大限制是64K,这个限制基本能够满足在正常情况下消息作为控制流信息交换通道的需求。但是,在某些特殊场景下,消息数据比较大时,就只能采用消息分片的方式。
那么如何能够基于MNS,又不做消息切片,传递大于64K的消息呢?解法是有的。


解决方案


1.生产者在往MNS 发送消息前,如果发现消息体大于64K,则先将消息体数据上传到OSS上;
2.然后,生产者把数据对应的Objcet信息作为消息发送到MNS上;
3.消费者从MNS队列里读取消息,判断消息内容是否为OSS的Object信息;
4.如果消息内容是OSS的Object信息,则从OSS下载对应的object内容,并作为消息体返回给上层程序;
5.对于大小小于64K的消息,仍然直接走MNS。
具体过程如下图所示:


程序实现


大消息示例代码提供了上述方案的一个Java语言版实现。主要功能都封装成类:BigMessageSizeQueue
BigMessageSizeQueue提供的public方法如下:


具体使用示例代码请参考附件中Demo.java中的代码。

注意事项


1.大消息主要消息网络带宽,用该方案发送大size消息时,生产者和消费者的网络带宽可能会是瓶颈。
2.大消息网络传输时间较长,受网络波动影响的概率更大,建议在上层做必要的重试。

展开
收起
轩墨 2017-10-24 13:39:09 1735 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
阿里云通信战略新品发布 ——国际/港澳台消息服务 立即下载
阿里云通信战略新品发布—国际/港澳台消息服务 立即下载
消息服务在Serverless中的应用 立即下载