spring-boot中如何确认来自亚马逊SNS的订阅请求HTTP

问题描述

我们如何使用 spring-boot 和 spring-cloud-starter-aws-messaging 确认来自 Amazon SNS 的订阅请求?

根据 Spring Cloud AWS – Messaging Support 教程,我们需要将主题名称添加到控制器级别的 @RequestMapping 注释中。

然后在 SNS 订阅中我们添加这样的端点:http://foo.eu-west-1.elb.amazonaws.com/topic_name-sns

=> 但就我而言,订阅从未得到确认,我不知道为什么。

这是我正在使用的一段代码

@Controller
@RequestMapping("/topic_name-sns")
public class SNSEndpointController {

    private static final Logger logger = LoggerFactory.getLogger(SNSEndpointController.class);

    @NotificationMessageMapping
    public void receiveNotification(@NotificationMessage String message,@NotificationSubject String subject) {
        logger.info("Received message: {},having subject: {}",message,subject);
    }

    @NotificationUnsubscribeConfirmationMapping
    public void confirmSubscriptionMessage(NotificationStatus notificationStatus) {
        logger.info("Unsubscribed from Topic");
        notificationStatus.confirmSubscription();
    }

    @NotificationSubscriptionMapping
    public void confirmUnsubscribeMessage(NotificationStatus notificationStatus) {
        logger.info("Subscribed to Topic");
        notificationStatus.confirmSubscription();
    }
}

解决方法

要使用 Spring Framework 和 SNS 服务,请考虑使用 Java V2 的官方 AWS 开发工具包,如本 AWS 教程中所述。

Creating a Publish/Subscription Spring Boot Application

如前所述,您可以在 Spring 项目中轻松使用适用于 Java 的 AWS 开发工具包 API,并且无需通过 AWS API 使用第 3 方 API。通过这样做,您将获得 AWS 开发工具包团队的支持。如果您继续使用第 3 方 API,则您将无法获得 AWS 开发工具包团队的支持。

,

最后我发现了这个问题。和权限有关,我的ECS任务没有确认订阅的权限,这就是订阅从未被确认的原因。