2

Я хочу использовать Amazon SNS для отправки критически важных мобильных уведомлений PUSH на 20 миллионов устройств. Каждая тема может содержать до 10 000 устройств, и я могу создать до 3000 тем. Использование SDK Amazon PHP будет означать отправку вызовов 2000 API за 1 секунду - всего 33 минуты. Это не подходит для критических по времени сообщений.Push Messaging с Amazon SNS, SQS и PHP

Я создал очередь SQS и подписался на тему SNS. Когда я отправляю свое сообщение PUSH в очередь SQS, он не доставляется - он остается в очереди.

Как я могу использовать эти службы для более быстрой отправки сообщений?

Спасибо!

+0

Я думаю, что у вас есть обратная связь. Когда вы подписываете очередь SQS на тему SNS, очередь будет получать сообщения, опубликованные в теме, но не наоборот. Дополнительную информацию см. В [документации] (http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html). –

+0

Я думаю, что ты прав. Итак, как бы я структурировал систему для отправки уведомлений PUSH на этот том пользователей? – SteveMc

+1

Возможно, вы захотите изучить использование SNS-> SQS и использовать несколько рабочих, чтобы потреблять очереди, чтобы повысить пропускную способность, если вы не можете получить требуемую пропускную способность из одного потока php. В чем вы основываете меру «1 секунду каждый» для операций с SDK AWS для PHP? –

ответ

0

Используйте Guzzle для отправки запросов параллельно.

$client->send(array(
    $client->get('http://www.example.com/foo'), 
    $client->get('http://www.example.com/baz'), 
    $client->get('http://www.example.com/bar') 
)); 
+0

На данный момент SNS предлагает 10 штук под каждой теме. –

+0

Прохладный, спасибо @GayanL – SteveMc

0

Вы проверили политику очереди? Когда вы его создаете, по умолчанию у него нет политики, и только владелец может ее использовать.

Проверьте пользователя IAM, который вы используете с API, и убедитесь, что у вас есть политика по предоставлению ему права на SQS.

Я использовал SNS в прошлом для доставки уведомлений 1.5MM каждый месяц, и у меня не было проблем. Но у меня нет доказанной репутации или опыта по нужной вам ставке. Но я предлагаю вам взглянуть на следующую статью http://www.quora.com/Push-Notifications/Which-is-best-to-use-Amazon-SNS-Google-Cloud-Messaging-or-Parse-Why, в которой немного говорится о SNS x GCM.

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

+0

В первом случае я пытаюсь работать с SNS-SQS-связью через консоль AWS. Должен ли я отправлять свое сообщение PUSH из SQS или SNS? Я могу хорошо опубликовать темы SNS и получить их на своем устройстве. Но я не уверен в связи между публикацией сообщений в SQS. Я выполнил [инструкции здесь] (http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html), но я хочу только опубликовать в одной очереди SQS, чтобы позаботиться о доставке сообщений, вместо этого публикации до 3000 вопросов SNS. У меня есть это понятие совершенно неправильно? – SteveMc

+0

Вы сделали это правильно. Чтобы доставить сообщение, вам необходимо, чтобы каждый получатель подписался на тему SNS. Если вам нужно доставить push-уведомления, вы должны пойти с SNS, если вам нужно доставить электронную почту, я бы предложил SES. Во всяком случае, вам нужно будет использовать фоновое задание для опроса очереди SQS и отправки сообщений. Что бы вы могли сделать, чтобы ускорить процесс, подписывается более одной очереди SQS на тему и обрабатывает эти очереди параллельно. –

0

Поскольку вы не указали полный рабочий процесс уведомления, я бы угадал, и я предполагаю, что у вас неправильный подход.

Например, если вам нужно отправить 100 push-уведомлений, и для этого вы одновременно создаете 100 запросов SNS из своего приложения, то вы добавляете ненужный уровень сложности. Просто отправьте 100 push из вашего приложения и пропустите SNS.

Правильный способ сделать это - запустить одно действие SNS, которое поразит всех работников, и они будут выполнять работу по требованию, когда они получат «заказ».

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

+0

Он не может этого сделать, потому что в настоящее время SNS поддерживает только 10 000 подписчиков на одну тему (http://aws.amazon.com/sns/faqs/) – tster

+0

Как я уже сказал, подход неправильный. Вы инициируете процесс со своей стороны, первые SNS-хиты * n * работников, и они выполняют эту работу до тех пор, пока que не будет пустым. Достаточно одного единственного действия SNS, остальное автоматизировано. – xmarcos

+0

Нет, не будет. OP нуждается в 20-миллионном разветвлении. SNS поддерживает максимум 10 000 разветвлений. – tster

0

10 000 устройств на одну тему * 3000 тем позволят вам отправить сообщение на 30 миллионов устройств. Почему бы не просто дублировать свою тему по всем 3000 темам и опубликовать свое сообщение по каждой теме? Пользователи получат подписку на одну из этих 3000 тем. Я на самом деле не пробовал это, но, кажется, самый прямой подход.

+0

3000 тем, 1 запрос в секунду = 50 минут. Это не подходит для критических запросов времени. Учитывая, что мне нужно всего 20 миллионов устройств, это 2000 тем или 33 минуты. Решение в этом случае - использовать Guzzle для отправки запросов параллельно. – SteveMc

Смежные вопросы