2017-08-07 46 views
0

我刚刚开始使用SNS,据我所知,你不能简单地订阅发行商并收听活动。你必须我)。创建一个公共访问回调(网址/电子邮件/短信),ii)。向服务注册它,并iii)。构建特定于回调类型的消费者。是否可以在不使用公共回叫的情况下收听AWS SNS通知?

我想用类似这样的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”,“短信”将无法工作**。 “SQS”可以工作,但你必须为每个实例设置一个队列,它使用长轮询而不是推送。 “应用程序”和“lambda”不适用。

AWS SNS是否适合此用例?如果没有,是否有另外的AWS服务?

**您可能可以使用https工作,但只能使用过于复杂的角色/ dns。

编辑: 我想我想要做的是类似于Google Cloud PubSub SubscriptionRabbitMQ但使用本机(AWS),而不是第三方服务。

+0

你在问[fanout场景](http://docs.aws.amazon.com/sns/latest/dg/SNS_Scenarios.html#SNSFanoutScenario)吗? –

+0

@AlexBlex类但我更感兴趣的**连接**。我不想为我的实例创建回调和订阅者。我想简单地有一个“套接字”连接。我的直觉是,我需要一种不同的产品,但不能识别出合适的AWS产品。为每个实例连接一个单独的队列似乎没有必要。 – Simon

+0

那么,你可能需要详细说明什么是“socket like”连接。 pubsub和rabbit都需要所有消费者订阅。订阅是相当“套接字”寿。 –

回答

2

“SQS”可以工作,但您必须为每个实例设置一个队列,并且它使用长轮询而不是推送。

SQS正是实施您在AWS中描述的方式的方式。 SNS不支持connection.on('notification',...风格的操作,但这正是SQS长时间轮询的实际操作方式。

不要被“长轮询”这个短语所困惑。是的,从技术上讲,就是这样,但它是长期投票中发生的合法推送操作 - 如果您对空队列进行长达20秒的轮询时间为5秒,则下一条到达的消息将会立即导致您的长期民意调查返回该消息。现在。没有在15秒内。即使你要求更多,你也不要坐在旁边等待更多。长期投票基本上是SQS中的一个推包裹。

请注意,您不一定必须事先定义扇出队列。每个侦听器都可以为自己创建一个队列,将队列订阅到主题并开始侦听。

或...在AWS IoT中有消息代理。有人可能会说这是一个应用程序有点不正统,但它似乎支持一个主题的多个用户。

消息代理维护所有客户端会话的列表以及每个会话的预订。在某个主题上发布消息时,代理会检查映射到该主题的订阅。代理然后将发布消息转发给具有当前连接的客户端的所有会话。

http://docs.aws.amazon.com/iot/latest/developerguide/iot-message-broker.html

它支持MQTT通过TCP和MQTT在网络插槽,TLS在这两种情况下。

+0

物联网消息代理看起来很有趣,但有它自己的问题......注册“设备”并分发客户端证书不会简化事情。接受答案。干杯。 – Simon

相关问题