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

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
文件存储 NAS,50GB 3个月
简介: 问题背景阿里云消息服务MNS的队列的消息大小最大限制是64K,这个限制基本能够满足在正常情况下消息作为控制流信息交换通道的需求。但是,在某些特殊场景下,消息数据比较大时,就只能采用消息分片的方式。那么如何能够基于MNS,又不做消息切片,传递大于64K的消息呢?解法是有的。解决方案1.生产者在往MN.
问题背景
阿里消息服务MNS的队列的消息大小最大限制是64K,这个限制基本能够满足在正常情况下消息作为控制流信息交换通道的需求。但是,在某些特殊场景下,消息数据比较大时,就只能采用消息分片的方式。
那么如何能够基于MNS,又不做消息切片,传递大于64K的消息?解法是有的。


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





程序实现
附件( BigMessageQueue.rar (2976 K) )提供了上述方案的一个Java语言版实现。主要功能都封装成类:BigMessageSizeQueue
BigMessageSizeQueue提供的public方法如下:

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

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


注意事项
1.大消息主要消息网络带宽,用该方案发送大size消息时,生产者和消费者的网络带宽可能会是瓶颈。
2.大消息网络传输时间较长,受网络波动影响的概率更大,建议在上层做必要的重试。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 弹性计算 Java
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
1267 7
|
6月前
|
消息中间件 存储 运维
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
50 2
|
3月前
|
消息中间件 安全 Java
构建基于RabbitMQ的安全消息传输管道
【8月更文第28天】在分布式系统中,消息队列如RabbitMQ为应用间的数据交换提供了可靠的支持。然而,随着数据的敏感性增加,确保这些消息的安全传输变得至关重要。本文将探讨如何在RabbitMQ中实施一系列安全措施,包括加密通信、认证和授权机制,以保护敏感信息。
87 1
|
4月前
|
存储 JSON 自然语言处理
OSS数据源一站式RAG最佳实践
本文介绍了如何使用OpenSearch LLM智能问答版通过OSS数据源一站式构建RAG系统。
7167 11
|
3月前
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
89 0
|
3月前
|
消息中间件 RocketMQ
RocketMQ - 生产者最佳实践总结
RocketMQ - 生产者最佳实践总结
48 0
|
6月前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
消息中间件 监控 安全
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
147 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
|
消息中间件 Java Kafka
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
148 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)

相关产品

  • 对象存储
  • 下一篇
    无影云桌面