Spring Cloud AWS 是不是支持使用 Amazon S3 Buckets 大于 256 的 Amazon SNS 消息负载?
Posted
技术标签:
【中文标题】Spring Cloud AWS 是不是支持使用 Amazon S3 Buckets 大于 256 的 Amazon SNS 消息负载?【英文标题】:Does Spring Cloud AWS supports Amazon SNS message payload bigger than 256 using Amazon S3 Buckets?Spring Cloud AWS 是否支持使用 Amazon S3 Buckets 大于 256 的 Amazon SNS 消息负载? 【发布时间】:2021-11-07 00:07:36 【问题描述】:我已经将 Spring Cloud AWS Messaging 与 SNS 和 SQS 一起使用,但现在我有一个限制,因为我正在处理大于 256kb 的有效负载。
我做了一些研究,我相信我的问题的答案是否定的,但只是检查以确保......
编辑: 我担心的是如何在 Spring AWS Cloud 中使用有效负载卸载,目前我正在使用 NotificationMessagingTemplate 类。对于解决方法,我添加了以下依赖项 software.amazon.sns:sns-extended-client:1.0.0 这让我可以访问 SNSExtendedClientConfiguration 和 AmazonSNSExcentedeClient 类,并且我能够发送超过 256kb 的消息,将有效负载卸载到 S3 存储桶。由于 springboot 仍在使用 1.X 版,并且据我了解,我对 AWS Java SDK 也有点困惑。
【问题讨论】:
否,最大为 256kb。您引用的库只是通过将大消息复制到 S3 来包装建议的处理方式 - 它不会改变 256kb 是限制的事实。 @stdunbar 我刚刚为我的问题添加了一个编辑 【参考方案1】:我添加了以下依赖项 software.amazon.sns:sns-extended-client:1.0.0,它使我能够访问 SNSExtendedClientConfiguration 和 AmazonSNSExtendedClient 类,并且我能够发送超过 256kb 的消息,将有效负载卸载到 S3 存储桶
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.model.PublishRequest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import software.amazon.sns.AmazonSNSExtendedClient;
import software.amazon.sns.SNSExtendedClientConfiguration;
@Component
public class SnsService
@Autowired
AmazonSNS snsClient;
@Autowired
ObjectMapper mapper;
@Autowired
AmazonS3 s3Client;
public void sendLargePayloads(String topicName, String bucket, Object message, String subject)
final SNSExtendedClientConfiguration snsExtendedClientConfiguration = new SNSExtendedClientConfiguration()
.withPayloadSupportEnabled(s3Client, bucket);
final AmazonSNSExtendedClient snsExtendedClient = new AmazonSNSExtendedClient(snsClient,
snsExtendedClientConfiguration);
try
snsExtendedClient.publish(new PublishRequest().withTopicArn(topicName).withSubject(subject)
.withMessage(mapper.writeValueAsString(message)));
catch (JsonProcessingException e)
e.printStackTrace();
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:这里的文档中指定的最大大小为 256:
Amazon SQS and SNS Announce 256KB Large Payloads
【讨论】:
对不起,我有点困惑。所以我不能通过 SNS 发送超过 256kb 的消息?这个文档怎么样:docs.aws.amazon.com/sns/latest/dg/large-message-payloads.html 还没有@smac2020,我正在克隆示例只是为了开始测试。我的第二个主要担心是我是否仍然可以使用开箱即用的 Spring Template 进行消息传递,以及是否只是更改一些 Spring AWS 云配置的问题 我也没有使用过那个 V1 SQS API。我不确定是否已移植到 V2。我会检查并回复。以上是关于Spring Cloud AWS 是不是支持使用 Amazon S3 Buckets 大于 256 的 Amazon SNS 消息负载?的主要内容,如果未能解决你的问题,请参考以下文章
如何在本地使用 spring-cloud-starter-aws 运行应用程序?
防止 spring-cloud-aws-messaging 尝试停止队列
带有 Spring-cloud-aws 和 cloudwatch 指标的 Spring Boot
使用 Java spring cloud aws 确认 SNS 通知时出现 InvalidParameterException