簡體   English   中英

AWS SNS 不發送訂閱確認

[英]AWS SNS not sending Subscription Confirmation

我已經設置了主題為“A”的 AWS SNS 設置。 我正在使用 Http 訂閱此 SNS 主題(嘗試使用在線 AWS 控制台手動和使用 Java 代碼)。 在這兩種情況下,我得到的只是“待確認”。 但是,SNS 不會向提供的 Url 發送初始的“SubscriptionConfirmation”。

請注意,我的端點已准備好接收 http POST 通知。 當我從我這邊手動執行 POST 時,我看到我的 servlet 正在處理我發送的那些 Json。 出於某種原因,我沒有從 AWS SNS 收到任何東西。

請注意,我用於訂閱的 http 端點是面向公眾的,因此 SNS 到達它應該沒有問題。

任何意見表示贊賞。

這是我的訂閱號 function。

public String subscribe(String arn,String url) {

    if(arn == null || arn.isEmpty())
        arn = topicArn;
    SubscribeRequest subRequest = new SubscribeRequest(arn,"http",url);
    SubscribeResult  result = snsClient.subscribe(subRequest);
    //get request id for SubscribeRequest from SNS metadata
    if(result != null){
        LOGGER.info("SubscribeResult - " + result.toString());
    }
    LOGGER.info("SubscribeRequest - " + snsClient.getCachedResponseMetadata(subRequest));
    return result.toString();
}

您總是會收到“待確認”作為對 subscriptionArn 的響應。 確認過程作為一個單獨的過程異步進行。 為了使這更令人困惑,如果您打電話來獲取當前訂閱的列表,他們將顯示“PendingConfirmation”的略有不同的 subscriptionArn,因此您以后甚至無法匹配它。

就能夠連接而言,我會先嘗試到達 AWS 之外的端點。 默認情況下,大多數 AWS 元素都非常鎖定,甚至無法相互連接,因此可能需要更改某處的安全設置以讓 SNS 連接到您的 EC2。 這就是為什么您可以連接到 AWS 之外的 EC2,但您的 SNS 服務不能。

還要檢查以確保您使用的 SNS 和 EC2 位於同一區域。 這是連接問題的常見原因。

如果您使用主機名進行連接,我會嘗試使用直接 IP 來查看它是否通過。

要進行故障排除,您應該在主題操作中打開“交付狀態”報告 - https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html 然后您將看到為什么無法從 AWS 端發送確認消息。

在您的 EC2 實例端,在網絡級別,您必須確保您正在偵聽的端口是從外部打開的。 有幾件事:確保端口在防火牆中打開(安全組設置),並確保 IP 可訪問(即,確保機器所在的 VPC 是公開可見的)。

我遇到了同樣的問題,該地區是問題所在。

確保SNS、CloudWatch 和 EC2同一區域

對我來說,禁用該主題的加密允許電子郵件最終被發送,盡管是發送到垃圾郵件文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM