使用AWS Services构建灵活的发布/订阅模式

时间:2013-11-12 15:50:38

标签: amazon-web-services amazon-sqs autoscaling amazon-sns

我想在amazon beanstalk上的几个应用程序实例之间同步消息。 每个实例都必须能够在不知道它们的情况下向所有其他实例发送消息。 所以我认为我使用SNS和SQS构建了一个发布/订阅模式。

当新的应用程序实例启动时,它会创建一个新的SQS队列并订阅该主题。 到现在为止还挺好。但是如果自动调节器关闭一个实例呢?

是否有可能捕获关闭事件? 或者您对其他实施有什么想法吗?

2 个答案:

答案 0 :(得分:1)

听起来您可以通过现有指标为您提供良好的服务,您可以通过CloudWatch或自己的custom metrics设置闹钟。例如,每个EC2实例都有几个指标来监控重复Status Checks。您可以定义警报,根据其状态向订阅者发送通知。状态检查失败超过X分钟的实例可能值得研究......如果您有应用程序监控警报,这可能会自动发生。

如果这对您来说不够窄,我建议您查看自定义指标。您可以创建自己的指标和警报(例如)按实例ping应用程序,以确保它们在同步消息之前做出响应。警报有三种状态:“OK”,“ALARM”和“INSUFFICIENT DATA”,您可以倾听并做出适当的响应。因此,例如,如果您的度量标准在与应用程序相同的实例上进行了轮询并且实例出现故障,那么您将开始获取“INSUFFICIENT DATA”消息。

自定义指标在我作为简单的应用程序监视器之前对我有用...如果我可以经常ping我的应用程序,则报告1或0。如果ping失败则发送通知,如果数据不足则发送通知。工作得很好。

答案 1 :(得分:0)

这篇文章很老了,但是我刚刚遇到它并且本周也遇到了类似的问题 - 由于该帖子仍未标记为已接受,我试一试。

我看到两个解决方案:

1)如果邮件的保留时间长于您要检查“未使用”队列的时间段:您可以使用API​​检索所有队列的列表并检查ApproximateNumberOfMessages。如果它大约是指定的阈值,您可以假设队列已经死亡,您可以删除它。您确定始终在给定时间段内始终发送指定数量的消息,或者您需要定义一种“保持活动”消息,该消息的目标只是将死队列填满您的阈值。

2)如果可以检测到多少/哪个节点正在运行 - 例如让每个节点定期(短周期,在每个节点上执行)用其nodeName / lastActivity时间戳更新数据库条目,然后定期(长周期,仅在一个节点上执行)检索此列表 - >遍历每个队列(由API检索)并检查相应的节点是否仍处于活动状态,如果没有,则删除队列。