AWS SNS: почему моя фантомная подписка не отображается в теме

У меня странная проблема с Amazon AWS SNS: при создании подписок и тем с использованием aws-php-sdk (3.112.7) всегда есть «призрачная» или «невидимая» подписка.

Снимок экрана консоли AWS

Как видите, эта подписка существует на вкладке "Подписки". Однако, когда я нажимаю на ссылку темы (здесь cav_56826), я не вижу никакой подписки.

Снимок экрана темы AWS

Ребята, у вас уже была похожая проблема? Как это может произойти?

Вот мой упрощенный код:

  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
    }

person André DS    schedule 20.08.2019    source источник
comment
Так же при удалении темы, создании ее заново и оформлении подписок ни одна из них вроде не добавляется. Но SNS отправляет мне 200 без ошибок   -  person André DS    schedule 09.01.2020
comment
можете ли вы предоставить версию aws-php-sdk, которую вы используете, спасибо.   -  person mostafazh    schedule 10.01.2020
comment
3.112.7 ! :)   -  person André DS    schedule 10.01.2020
comment
Кажется, что там какая-то система кэширования, это действительно странно   -  person André DS    schedule 10.01.2020
comment
кэширование чего? Вы создали что-то до того, как эта проблема возникла?   -  person mostafazh    schedule 10.01.2020
comment
также какую версию php вы используете?   -  person mostafazh    schedule 10.01.2020
comment
Я использую PHP 5.6.3   -  person André DS    schedule 10.01.2020
comment
@mostafazh Я просто удаляю тему, создаю ее снова через несколько секунд, а затем делаю новые подписки.   -  person André DS    schedule 10.01.2020
comment
если мой ответ сработал для вас, отметьте его как правильный ответ i.stack.imgur.com/QpogP.png   -  person mostafazh    schedule 02.07.2020


Ответы (1)


Использование PHP 5.6.40 и AWS SDK PHP 3.122.0 (находится здесь) и в приведенном ниже коде после внесения некоторых изменений я вижу, что происходит ожидаемое/правильное поведение.

<?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»: введите здесь описание изображения

Надеюсь это поможет.

person mostafazh    schedule 10.01.2020
comment
Здравствуйте, спасибо за ваш ответ. У тебя нет проблем? Даже если вы быстро удалите свою тему и снова запустите код? - person André DS; 13.01.2020