Amazon SQS 超过 2GB 数据

Opv*_*Opv 7 amazon-sqs amazon-web-services

使用 SQS 对来自客户端的一些上传进行排队。我收到以下错误:

com.amazonaws.services.sqs.model.AmazonSQSException:一个或多个参数无效。原因:消息必须短于 262144 字节。(服务:AmazonSQS;状态代码:400;错误代码:InvalidParameterValue;请求 ID:

我正在使用扩展客户端库。这是我用来发送消息的代码:

MessageAttributeValue msgAttr = new MessageAttributeValue();
byte [] byteArr=attachment.getBytes();
ByteBuffer buf = ByteBuffer.wrap(byteArr);
msgAttr.setBinaryValue(buf);
msgAttr.setDataType("Binary");
smr.addMessageAttributesEntry("attachment", msgAttr);
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 11

根据Amazon SQS 的消息相关限制文档:

消息大小
最小消息大小为 1 字节(1 个字符)。最大值为 262,144 字节 (256 KB)。

要发送大于 256 KB 的消息,您可以使用适用于 Java 的 Amazon SQS 扩展客户端库。该库允许您发送包含对 Amazon S3 中消息负载的引用的 Amazon SQS 消息。最大负载大小为 2 GB。

该库基本上将数据存储在 Amazon S3 中,然后将引用插入 Amazon SQS 消息中。

无论出于何种原因,该库对附件强制实施 2GB 限制。您可以尝试修改代码以处理更大的文件,或者您可以编写自己的代码,将对象存储在 Amazon S3 中,并在 Amazon SQS 消息中简单地包含对 amazon S3 对象的引用。

  • 我解决了这个问题,在生产者端上传 s3 中的文件对象并在 SQS 消息中发送 s3 路径,在消费者端从消息中获取 S3 密钥并下载对象并从 s3 中删除。优点:没有大小限制缺点:消费者和生产者都必须共享 S3 的访问密钥 (3认同)