https://d226lax1qjow5r.cloudfront.net/blog/blogposts/using-a-message-queue-with-sms-for-throughput-limitations/Blog_Send-Outgoing-SMS_1200x600.png

Verwendung einer Nachrichtenwarteschlange mit SMS bei Durchsatzbeschränkungen

Zuletzt aktualisiert am May 5, 2021

Lesedauer: 9 Minuten

In einigen Ländern stellen der begrenzte Durchsatz von SMS und die langsamen Abfragezeiten (manchmal bis zu einer Anfrage pro Sekunde) eine zusätzliche Herausforderung für den Massenversand dar. Eine Möglichkeit, diese Beschränkungen zu umgehen, ist die Verwendung einer Nachrichtenwarteschlange, wie z. B. AWS SQS.

In diesem Beispiel erstellen Sie einen serverlosen Microservice auf AWS Lambda unter Verwendung dieser Python-Anwendung, die auf Github verfügbar ist die Folgendes verwendet Flaskund Serverless. Die Anwendung dient zwei Zwecken: Sie fügt Nachrichten zu AWS SQS und erleichtert dann den eigentlichen Versand durch Vonage SMS wie gewünscht.

Voraussetzungen

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

Anweisungen zur Einrichtung

Klonen Sie die nexmo-community/sms-aws-sqs-python-sender von GitHub, und navigieren Sie in das neu erstellte Verzeichnis, um fortzufahren.

Umwelt

umbenennen .env.default in .env und fügen Sie Werte hinzu zu VONAGE_API_KEY und VONAGE_API_SECRET die Sie auf Ihrem Dashboard der Vonage API.

AWS-Einrichtung

Sie müssen Folgendes erstellen AWS-Anmeldeinformationen wie von Serverless angegeben. Aktualisieren Sie die .env Datei mit diesen.

Erstellen Sie außerdem eine neue SQS-FIFO-Warteschlange mit den Standardeinstellungen an, und aktualisieren Sie .env mit der URL der SQS-Warteschlange. FIFO stellt sicher, dass die Nachrichten in der Reihenfolge gesendet werden, in der sie gespeichert wurden.

Verwendung

Um zu beginnen, erstellen Sie eine virtualenv in der Projektwurzel, um das Projekt zu enthalten. Dann aktivieren Sie es wie folgt:

virtualenv venv --python=python3 source venv/bin/activate

Als Nächstes initialisieren Sie npm und folgen den Aufforderungen zur Auswahl der Standardeinstellungen, sofern Sie diese nicht ändern möchten. Installieren Sie außerdem mit npm die erforderlichen Abhängigkeiten für DEV, damit Serverless und Lambda mit der Flask-App arbeiten können.

npm init npm install --save-dev serverless-wsgi serverless-python-requirements

Nun können Sie pip verwenden, um die erforderlichen Python-Abhängigkeiten zu installieren. Die Abhängigkeiten befinden sich in der requirements.txt, also weisen Sie pip an, diese zu verwenden.

pip install -r requirements.txt

Lokales Laufen

Wenn Sie die App lokal ausführen und testen möchten, bevor Sie sie auf AWS Lambda bereitstellen, können Sie sie mit dem folgenden Befehl bereitstellen:

sls wsgi serve

In der Standardeinstellung wird die App unter http://localhost:5000 angezeigt. Sie drücken Ctrl+c um sie zu schließen.

Auf Lambda bereitstellen

Wenn alle oben genannten Schritte erfolgreich abgeschlossen sind, können Sie nun Serverless verwenden, um die App in AWS Lambda bereitzustellen.

sls deploy

WICHTIG: Diese Anwendung enthält keine Authentifizierung für die Nutzung. Stellen Sie daher sicher, dass Sie ihr eine Authentifizierung voranstellen, um eine öffentliche Nutzung zu verhindern. Wenn Sie die Anwendung der Öffentlichkeit zugänglich machen, kann dies zu Nutzungsgebühren bei AWS und Vonage führen.

Verfügbare Endpunkte

Es gibt 3 URL-Endpunkte, die mit diesem Client verfügbar sind:

1 GET-Anfrage an /

  • Führt keine Aktionen aus, bietet aber eine schnelle Möglichkeit zum Testen

2 POST-Anfrage an /add

  • Diese Aktion speichert die Nachricht in SQS.

  • Übergeben Sie einen POST mit einem JSON-Body wie dem folgenden. Ersetzen Sie die Platzhalter, die mit <> durch Ihre Daten.

  • Das Ergebnis enthält die SQS MessageId.

{
    "from": "<your_name_or_number>",
    "message": "<sms_message_contents>",
    "to": "<recipients_number>"
}

3 GET-Anfrage an /process

  • Startet den Sendevorgang.

  • Ruft Nachrichten aus der SQS-FIFO-Warteschlange ab.

  • Stellt eine Verbindung zu Nexmo her und sendet die SMS.

location=None, media_mode=relayed, archive_mode=manual
Beispiele:

Rufen Sie die vom Bereitstellungsprozess bereitgestellte URL auf. Nachfolgend finden Sie einige Beispiele dafür, wie Musteranfragen aussehen können: (Ihre URL kann abweichen.)

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/

Der / Endpunkt gibt die generische Nachricht zurück.

POST https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/add

Der add Endpunkt gibt die SQS MessageId.

GET https://7ulasfasdasdfw4.execute-api.us-east-1.amazonaws.com/dev/process

Der process Endpunkt gibt eine Nachricht zurück, die einen erfolgreichen Versand anzeigt.

Deaktivieren von Virtualenv

Um die Virtualenv zu beenden, können Sie sie bei Bedarf deaktivieren.

deactivate

HINWEIS: Je nach Betriebssystem müssen Sie möglicherweise den Befehl virtualenv an den obigen Befehl anhängen.

Nächste Schritte

In diesem Beispiel enthält die Anwendung einen /process Endpunkt, der in regelmäßigen Abständen mit einer HTTP-GET-Anforderung aufgerufen werden kann. Alternativ dazu könnte der Code in /process in eine separate Lambda-Funktion eingefügt und direkt von geplanten CloudWatch-Ereignissen anstelle einer HTTP-GET-Anfrage aufgerufen werden.

Wenn Sie Fragen haben oder Probleme auftreten, können Sie sich an @VonageDev auf Twitter oder in der Vonage-Gemeinschaft Slack-Team. Viel Glück!

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpVonage Ehemalige

Adam ist ein Entwickler und Berater, der gerne Ultraläufe absolviert, bloggt und anderen dabei hilft, Technologien zu zähmen, um erstaunliche Dinge zu erreichen, und der ein unstillbares Verlangen hat, Mentoren zu sein und zu helfen.