AWS:在多个实例上运行的多个工作进程的广播通知

Vov*_*sov 2 notifications broadcast publish-subscribe amazon-sqs

我在Amazon EC2中有多个应用程序实例,每个实例都运行多个工作进程.我想要的是每个工作进程订阅一些通知(例如配置更改).此通知应基本上是广播消息,以便一旦发送 - 每个工作人员都会收到它.

我知道SQS不支持广播消息.通过类似的问题/线索,我看到了使用SNS而不是SQS的建议.由于以下原因,我不确定这对我有用:

  • 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们.在这种情况下,我没有看到任何明确的方法来取消订阅每个工作人员(每个实例我有多个工作人员)一旦实例终止,这意味着我会在一段时间后结束一堆死的订阅者.
  • 用于订阅的协议也不清楚.HTTP端点看起来是唯一的选项,这意味着我的每个工作者都应该在自己的端口上运行HTTP服务器.它看起来我应该只监听实例公共IP,这会增加一层复杂性和不安全性.

目前我有一个基于第三方的解决方案 - 我正在使用0MQ发布/订阅服务器.但我正在寻找AWS提供的一些开箱即用的解决方案.

谢谢,Vovan

Mic*_*bot 6

想到的开箱即用的AWS解决方案是创建一个SNS主题,然后对于每个实例,当实例启动时,它将创建自己的SQS队列并将队列订阅到SNS主题,这样每个队列都会获得您发布到SNS的每条消息的广播副本.

您希望在实例终止时取消订阅并删除这些队列,这可以通过生命周期挂钩来完成.

如果您不想使用服务器来管理生命周期钩子的处理(将启动或终止事件发布到SNS或SQS),您可以创建AWS API Gateway端点以触发AWS Lambda函数,然后订阅API使用https进行SNS主题的网关端点,以处理Lambda中的清理任务,无需服务器.

这几项服务一起工作,可能听起来有点复杂,但价格非常便宜,几乎不需要维护或注意.