问题描述
我们如何使用 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任务没有确认订阅的权限,这就是订阅从未被确认的原因。