【问题标题】:AWS SNS : Why is my "ghost" subscription not showing in TopicAWS SNS:为什么我的“幽灵”订阅未显示在主题中
【发布时间】:2020-01-11 00:25:27
【问题描述】:

我在使用 Amazon AWS SNS 时遇到了一个奇怪的问题:使用 aws-php-sdk (3.112.7) 创建订阅和主题时,总是存在“幽灵”或“不可见”订阅。

如您所见,此订阅存在于“订阅”标签中。但是,当我点击主题链接(此处为 cav_56826)时,我看不到任何订阅

你们是否已经遇到过类似的问题?怎么会这样?

这是我的简化代码:

  try
    {
        $arn = "arn:aws:sns:eu-west-1:XXXXXXXXXXXXXXXXX:app/APNS_VOIP_SANDBOX/ios_cav";
        $topics = array("allUsers", "cav_56826");
        $topicsToSubcribe = array();

        foreach ($topics as $topic)
        {
            $res = $this->snsClient->createTopic(['Name' => $topic]);
            if ($res->get('@metadata')['statusCode'] == 200)
            {
                array_push($topicsToSubcribe, $res->get('TopicArn'));
            }
            else
            {
                throw new Exception("An error occured during Amazon SNS createTopic", $res->get('@metadata')['statusCode']);
            }
        }

        $SNSEndPointData = $this->snsClient->createPlatformEndpoint([
            'PlatformApplicationArn' => $arn,
            'Token'                  => $token
        ]);

        foreach ($topicsToSubcribe as $topic)
        {
            $this->snsClient->subscribe([
                'Protocol' => "application",
                'Endpoint' => $SNSEndPointData->get('EndpointArn'),
                'TopicArn' => $topic
            ]);
        }
    }
    catch (\Exception $e)
    {
       // Logs some errors
    }

【问题讨论】:

  • 另外,当删除一个主题时,重新创建它并进行订阅,似乎都没有添加。但是 SNS 给我发了 200 没有任何错误
  • 能否提供您正在使用的aws-php-sdk 的版本,谢谢。
  • 3.112.7 ! :)
  • 好像有一种缓存系统,真的很奇怪
  • 缓存什么?在此问题发生之前您是否创建了一些东西?

标签: amazon-web-services push-notification amazon-sns aws-php-sdk


【解决方案1】:

使用 PHP 5.6.40 和 AWS SDK PHP 3.122.0(找到 here)和下面的代码做一些更改后,我可以看到预期/正确的行为正在发生。

<?php

require '/usr/src/myapp/aws.phar';
$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
    'version'  => 'latest',
]);

$snsClient = $sdk->createSns();
$token = "XX:YY";

try
    {
        $arn = "arn:aws:sns:us-east-1:360479286475:app/GCM/test-stackoverflow";
        $topics = array("allUsers", "cav_56826");
        $topicsToSubcribe = array();

        foreach ($topics as $topic)
        {
            $res = $snsClient->createTopic(['Name' => $topic]);
            if ($res->get('@metadata')['statusCode'] == 200)
            {
                array_push($topicsToSubcribe, $res->get('TopicArn'));
            }
            else
            {
                throw new Exception("An error occured during Amazon SNS createTopic", $res->get('@metadata')['statusCode']);
            }
        }

        $SNSEndPointData = $snsClient->createPlatformEndpoint([
            'PlatformApplicationArn' => $arn,
            'Token'                  => $token
        ]);

        foreach ($topicsToSubcribe as $topic)
        {
            $snsClient->subscribe([
                'Protocol' => "application",
                'Endpoint' => $SNSEndPointData->get('EndpointArn'),
                'TopicArn' => $topic
            ]);
        }
    }
    catch (\Exception $e)
    {
       // Logs some errors
    } 

?>

所有订阅:

“allUsers”订阅:

希望这会有所帮助。

【讨论】:

  • 您好,感谢您的回答。你没有问题吗?即使您快速删除主题并再次运行代码?
猜你喜欢
  • 1970-01-01
  • 2015-01-14
  • 2022-11-10
  • 1970-01-01
  • 2015-05-29
  • 2015-09-26
  • 1970-01-01
  • 2021-11-25
  • 2016-06-27
相关资源
最近更新 更多