aws sns 发布压缩有效负载

aws sns publising compressed payload

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

你已经看过了吗? https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html

如果你认为文件可以增加的时候我建议另一种方法。

将文件放在 S3 存储桶上并将 S3 事件通知附加到 SNSTopic,以便在准备好处理新文件时通知所有消费者。 换句话说,SNS 的消息将是文件的位置,而不是文件本身。 想想看。

您可以 gzip 邮件正文 -- 但是 -- SNS 邮件正文仅支持 UTF-8 字符数据。 Gzipped 数据是二进制的,因此它不直接与 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)。

您还可以将 SNS/SQS 扩展客户端库用于大消息负载。

‪https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-sns-launches-client-library-supporting-message-payloads-of-up-to-2-gb