【问题标题】:How to subscribe/unsubscribe each server in an auto-scaling group to SNS如何将自动缩放组中的每个服务器订阅/取消订阅 SNS
【发布时间】:2015-04-10 16:35:24
【问题描述】:
我们正在使用 Elastic Beanstalk 来提供 REST API。现在,我想开发一个端点,以异步方式提供来自 SNS 主题的通知。
为了接收这些通知,我需要将 API 服务器订阅到 SNS 主题。考虑到 EBS 应用程序可以扩展到多台服务器并再次缩小的情况,我怎么能做到这一点?我不希望订阅 SNS 主题的死链接很多...
【问题讨论】:
标签:
asynchronous
amazon-web-services
autoscaling
amazon-sns
【解决方案1】:
在春季世界中,我们有一个@PostConstruct,它在服务器启动时被调用,您可以在其中订阅“this.server”网址到给定的主题(您可能需要构建一个正确的工作订阅网址——使用 InetAddress 等) .
因此存在使用 @RestController 的有效订阅 url,它会立即确认此类订阅会导致 sns 端点被注册。任何新服务器都会做同样的事情,也就是自己注册(创建新堆栈时)。我们还需要额外的代码来后续消费通知消息,并在确认订阅端点收到通知消息时做一些事情。
【解决方案2】:
AWS 希望您使用 SNS 的方式不是直接订阅它。任何需要在组件中触发某些东西的通知都应该使用 SQS 队列缓冲通知。出于这个原因,我们选择使用 Amazon 托管的 Redis 分发对一组可变/可扩展的 Sub 进行 Pub-Sub。