超大消息传输

更新时间:2016-11-23 17:16:08

问题背景

阿里云消息服务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方法如下:

  1. publicBigMessageSizeQueue(CloudQueue cq,OSSClient ossClient,String ossBucketName)
  2. //构造函数,cq为普通的mnsqueue对象,ossClient和ossBucketName包含了大消息中转的oss region和bucket
  3. publicMessage putMessage(Message message)// 发送消息
  4. publicMessage popMessage(int waitSeconds)// 接收消息
  5. publicvoid deleteMessage(String receiptHandle)//删除消息
  6. publicvoid setBigMessageSize(long bigMessageSize)//设置大消息的阈值(大于这个值的消息会走OSS),默认64K;
  7. publicvoid setNeedDeleteMessageObjectOnOSSFlag(boolean flag)// 设置是否需要删除OSS上的消息,默认yes;

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

注意事项

1.大消息主要消息网络带宽,用该方案发送大size消息时,生产者和消费者的网络带宽可能会是瓶颈。

2.大消息网络传输时间较长,受网络波动影响的概率更大,建议在上层做必要的重试。

阿里mns超大消息传输相关推荐

  1. 最佳实践:如何基于MNS和OSS实现无大小限制的消息传输

    问题背景 阿里云消息服务MNS的队列的消息大小最大限制是64K,这个限制基本能够满足在正常情况下消息作为控制流信息交换通道的需求.但是,在某些特殊场景下,消息数据比较大时,就只能采用消息分片的方式. ...

  2. php集成阿里MNS消息服务

    一.使用背景 请看下图: (1)服务端发布消息给物联网套件.设备从物联网套件订阅消息. (2)设备发布消息到物联网套件,物联网转发消息到MNS消息服务,防止设备发布消息过多.服务端从MNS队列中获取设 ...

  3. springboot集成阿里MNS消息队列发布订阅消息功能

    声明: 上一篇文章是springboot集成阿里ons发布订阅消息,此篇文章是mns发布订阅功能先简单记录一下ons与mns有什么区别 这里是在网上找的对比图: 此处为具体区别文章链接:点击打开链接 ...

  4. 阿里MNS服务:代码显示成功并可以得到消息id及其md5,手机却收不到短信

    最近在做一个PHP开发的后台项目,BOSS要求短信验证码使用阿里的MNS服务.于是在阿里查看了DEMO并编写验证码需求. 在阿里设置的短信模版为: "你好,你本次注册实训平台的用户名为:${ ...

  5. 区块链亲民应用场景大猜想 第一次或将献给超大文件传输

    区块链亲民应用场景大猜想 第一次或将献给超大文件传输 提及区块链,相信大部分人既熟悉又陌生,熟悉是因为比特币这些年的跌宕起伏,让人蠢蠢欲动却又望而生畏:陌生是因为这是一个全新的东西,并没有走进寻常百姓 ...

  6. 启发:从MNS事务消息谈分布式事务

    启发:从MNS事务消息谈分布式事务 事务消息本质上解决的问题是业务系统与消息系统之间的事务问题(跨系统分布式事务),其基本原理即两阶段提交以及最终一致性保障.最近看了下阿里云mns事务消息的实现原理, ...

  7. 阿里MNS、OSS 和亚马逊 SQS、S3对比

    主要是阿里云和亚马逊对比,其他的厂家略微提一下. 主要是对比的 云存储.消息队列服务 1.阿里OSS vs亚马逊 S3云存储 a.接口对比 :阿里云 和亚马逊接口差不多 基本参数:endpoint 存 ...

  8. C#实现阿里云微消息队列LMQ

    本文属于个人原创作品.个人总结,谢绝转载.抄袭.如果您有疑问或者希望沟通交流,可以联系QQ:865562060. 一.简介 MQ 微消息队列(Light Message Queue,简称 LMQ): ...

  9. 图解:消息传输的架构模式

    从概念上讲,一条消息是一个发送方与一个或多个接收方之间的一次信息交换.自从大型机问世以来,消息交换一直是计算机编程和架构设计的重要组成部分. 多年来,消息传输的实践已经发展成多种消息传输模式.在本文中 ...

最新文章

  1. 写那么多年Java,还不知道啥是Java agent 的必须看一下!
  2. Keepalived中Master和Backup角色选举策略
  3. 咱们程序员,能吵吵就别动手!现在靠说就可以编程,支持Java、Python等10种语言|免费...
  4. Java 中的多线程你只要看这一篇就够了
  5. python - os模块
  6. python解压打开文件过多_自动解压大量压缩文件 Python 脚本 | 学步园
  7. MyISAM 和 InnoDB 讲解
  8. 作者:张鹏(1993-),男,国防科学技术大学并行与分布处理重点实验室硕士生...
  9. 初识Notification
  10. 逻辑斯蒂回归java_机器学习 (五)逻辑斯蒂回归
  11. poj 3040 Allowance (贪心
  12. 支付宝微信支付回调地址访问不成功
  13. 论文参考文献生成以及标注方法说明
  14. 前端常见的浏览器兼容性问题及解决方案
  15. 为什么街头篮球总提示服务器维护,我玩街头篮球,但这几天它总是说连接不上服务器怎么回事?...
  16. Visual C++开发类似QQ游戏大厅全过程
  17. Leetcode 第 201 场周赛 (2020 滴滴校招专场)
  18. 心电算法准确性评价总结
  19. 在oracle数据库中存储数据库的文件是,Oracle数据库,oracle
  20. 李航《统计学习方法》第二版第一章-泛化误差

热门文章

  1. 浪潮信息m6服务器性能,M6四路服务器——浪潮信息新品性能显著
  2. NBA季后赛历史得分榜
  3. 使用SCP传输文件报错:ssh: connect to host xx.xx.xx.xx port 22: Connection refusedlost connection
  4. DDOS攻击器常见的三种DDoS攻击方式详解
  5. QT qmake makefile minGW
  6. UDS刷写上位机全套CAPL脚本,有简单panel界面
  7. 几个特性,快速上手Kotlin
  8. nyoj325 zb的生日 DFS
  9. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例47
  10. Maven 下载JAR包