2017-08-07 42 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

相關問題