我已经设置了AWS SNS设置,主题是“A'”。我正在使用Http订阅此SNS主题(在线使用AWS控制台并使用Java代码手动尝试)。我得到的只是等待确认'在这两种情况下。但是,SNS不会发送初始订阅确认信息。到提供的网址。
请注意,我的端点已准备好接收http POST通知。当我从我这边手动执行POST时,我看到我的servlet正在处理我发送的Json。出于某种原因,我从AWS SNS没有收到任何信息。
请注意,我用于订阅的http端点是公开的,因此SNS应该没有问题。
赞赏任何意见。
这是我的订阅功能。
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();
}
答案 0 :(得分:0)
你总是得到"等待确认"作为subscriptionArn的响应。确认过程与单独的过程异步。如果你打电话获得当前订阅的列表,这将使这更加令人困惑,他们将显示稍微不同的subscriptionArn" PendingConfirmation"所以你以后甚至都不能匹配它。
就能够连接而言,我会先尝试在AWS之外找到一个终点。默认情况下,大多数AWS元素都被锁定,甚至无法相互连接,因此可能需要更改某个安全设置以让SNS连接到您的EC2。这就是为什么你可以连接到AWS之外的EC2,但你的SNS服务不能。
同时检查以确保您使用的SNS和EC2位于同一区域。这是连接问题的常见原因。
如果您使用主机名进行连接,我会尝试使用直接IP来查看它是否通过。
答案 1 :(得分:0)
要进行问题排查,您应该启用"投放状态"主题操作中的报告 - https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html。然后,您将看到为什么无法从AWS大小发送确认消息。
在EC2实例端,在网络级别,您必须确保您正在侦听的端口是从外部打开的。有几件事:确保端口在防火墙中打开(安全组设置),并确保IP可以访问(即,确保您的VPC在机器所在的位置是公开可见的。)
答案 2 :(得分:0)
我遇到了同样的问题,地区就是问题。
确保 SNS,CloudWatch和EC2 位于同一区域。