【发布时间】:2019-08-23 16:47:20
【问题描述】:
我刚刚开始使用 SNS,据我所知,您不能简单地订阅发布者并收听事件。你必须我)。创建一个可公开访问的回调(url/email/sms),ii)。将其注册到服务和 iii)。构建特定于回调类型的消费者。
我想使用类似这样的 API:
const client = new SnsClient({
region: 'eu-west-1',
topicArn: 'XXX'
})
client.on('connection', (connection) => {
connection.on('notification', (notification) => {
// do some work with notification
})
})
我错过了什么吗?我想让 X 台 Web 服务器监听一个事件(扇出)。
例如,我的工作人员可能是私有子网上的 EC2 实例,因此可用订阅:“http(s)”、“email”、“sms”不起作用**。 “SQS”可以工作,但您必须为每个实例设置一个队列,它使用长轮询而不是推送。 “application”和“lambda”不适用。
AWS SNS 是否适合此用例?如果没有,是否有替代的 AWS 服务?
** 您也许可以让 https 工作,但只能使用过于复杂的角色/dns。
编辑: 我认为我想做的类似于Google Cloud PubSub Subscription 或RabbitMQ,但使用的是本机 (AWS) 而不是 3rd 方服务。
【问题讨论】:
-
你问的是fanout scenario吗?
-
@AlexBlex 有点像,但我对 connection 更感兴趣。我不想为我的实例创建回调和订阅者。我只想拥有一个“类似套接字”的连接。我的直觉是我需要一种不同的产品,但无法确定合适的 AWS 产品。似乎没有必要为每个实例建立一个单独的队列。
-
那么,您可能需要详细说明什么是“socket like”连接。 pubsub 和 rabbit 都要求所有消费者订阅。订阅非常“类似于套接字”。
-
@AlexBlex 据我所知,为了使用 SNS,您需要注册订阅者回调。这需要你 i)。发布公共 URL(针对每个节点)和 ii)。在 SNS 上注册。如果您有动态数量的节点,那么设置/删除的工作量很大。我宁愿只启动一个节点,与发布者建立连接,然后收听事件。 PubSub 确实需要命名订阅,但它比 SNS 更简单,而且 RabbitMQ 允许您连接并使用在交换器上发送的消息。
标签: node.js amazon-web-services amazon-sns