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 自动配置担任角色

带有 Spring-cloud-aws 和 cloudwatch 指标的 Spring Boot

使用 Java spring cloud aws 确认 SNS 通知时出现 InvalidParameterException

使用 Spring Cloud 的目的是啥? AWS 和 Springcloud 有啥区别?