AWS SNS发布压缩负载

3

在发布到AWS-SNS时,消息的最大大小限制为256KB。我们是否可以使用GZIP压缩消息并发送压缩后的消息以克服大小限制?

3个回答

10
你可以对消息正文进行gzip压缩,但是SNS消息正文仅支持UTF-8字符数据。gzip数据是二进制的,因此它与SNS不直接兼容,因为不是每个可能的字节序列也都是有效的UTF-8字符序列。
所以,在对负载进行gzip压缩后,您需要使用诸如base-64之类的方案对该二进制数据进行编码。Base-64对任意二进制数据(每字节8位)仅使用64个符号(即2^6,每字节有效6位),因此通过此编码,字节数膨胀了8/6(133%)。这意味着192KB的二进制数据编码为256KB的base-64编码数据,因此在gzip之后,您的消息的最大允许大小变为192K(因为SNS限制为256KB)。但是所有的base-64符号都是有效的单字节UTF-8字符,这是为什么尽管它会增加大小,但这种编码如此常用的一个重要原因。另外,gzip通常具有远高于1.33:1的压缩比(这是gzip + base-64的平衡点)。
但是,如果您的消息将被gzip压缩到192K或更低,则这绝对可以与SNS一起使用(SQS也是如此,它具有相同的字符集和大小限制)。

4
你已经看过这个了吗?https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html 如果您认为文件可能会随时间增加,我建议采用另一种方法。
将文件放在S3存储桶中,并将S3事件通知附加到SNSTopic,以便所有消费者在准备处理新文件时都会收到通知。 换句话说,SNS的消息将是文件的位置,而不是文件本身。 好好想想。

这看起来是一个很好的解决方案,可以克服256KB的限制。我没有理解附加S3事件通知的必要性。在S3文件创建之后,还需要通知吗?我是否误解了这个说法? - Andy Dufresne
@AndyDufresne S3通知是通知新对象上传到存储桶的最简单方式。显然,这不是唯一的方法。我们可以放置对象并通知其已上传。 - gccodec

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接