post-image

Messaging: Einrichtung von Point-to-Point Messaging mit Amazon SQS


Ziel des Beitrags

In diesem Beitrag wird gezeigt wie AWS SQS zur Realisierung von Point-to-Point Kommunikation zwischen Diensten eingerichtet werden und die Funktionsweise mit dem AWS CLI getestet werden kann.

Dieser Artikel gehört zu einer Reihe von Beiträgen, die sich mit Messaging mit Hilfe von SNS und SQS auf der Cloud-Plattform AWS beschäftigen. Die weiteren Beiträge sind:

  1. Eigenschaften von AWS SQS und AWS SNS
  2. Einrichtung Publish/Subscribe mit AWS SQS und AWS SNS
  3. Messaging: AWS SQS und SNS mit Java nutzen

Point-to-Point mit SQS

Für die folgenden Beispiele verwenden wir die Version 2 der AWS CLI mit Docker. Die Konfiguration zum Zugriff auf unser Projekt in der AWS cloud wird mit Hilfe des Befehls

docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli configure

erstellt. Hierfür werden ein AWS Account und AWS Access Key ID und AWS Secret Access Key benötigt.

Anlegen einer FIFO-Queue

Erstellen einer FIFO-Queue mit einer Verzögerung bei der Nachrichtenveröffentlichung, einer maximalen Nachrichtengröße von 1 KB und einer Aufbewahrungsdauer der Nachrichten von 14 Tagen (maximaler Wert). Der Name einer FIFO-Queue muss immer mit .fifo enden.

:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs create-queue --queue-name test.fifo --attributes DelaySeconds=1,MaximumMessageSize=1024,MessageRetentionPeriod=1209600,FifoQueue=true
{
    "QueueUrl": "https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo"
}

Senden von Nachrichten an eine FIFO-Queue

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html Senden einer Nachricht an die FIFO-queue test.fifo mit der Nachricht “Message 1”. Es wird die message group ID “mygroup” verwendet sowie die message deduplication ID von 4711.

:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs send-message --queue-url https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo --message-body "Message 1" --message-group-id mygroup --message-deduplication-id 4711
{
    "MD5OfMessageBody": "68390233272823b7adf13a1db79b2cd7",
    "MessageId": "f7a2d8cf-67e6-4ff8-b948-0c0ecc3c7a17",
    "SequenceNumber": "18854752083601647616"
}

Erneute Ausführung liefert dasselbe Ergebnis (deduplication)

:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs send-message --queue-url https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo --message-body "Message 1" --message-group-id mygroup --message-deduplication-id 4711
{
    "MD5OfMessageBody": "68390233272823b7adf13a1db79b2cd7",
    "MessageId": "f7a2d8cf-67e6-4ff8-b948-0c0ecc3c7a17",
    "SequenceNumber": "18854752083601647616"
}
:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs send-message --queue-url https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo --message-body "Message 2" --message-group-id mygroup --message-deduplication-id 4712
{
    "MD5OfMessageBody": "88ef8f31ed540f1c4c03d5fdb06a7935",
    "MessageId": "a3a667eb-c8ef-4377-9ee1-b339ffe881b9",
    "SequenceNumber": "18854752091483631616"
}

Die Nachricht "Message 1" ist trotz doppeltem Versand nur einmal in der Queue enthalten und die Reihenfolge bleibt erhalten.

Nachrichten in der Queue

Empfangen von Nachrichten von einer FIFO-Queue

:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs receive-message --queue-url https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo
{
    "Messages": [
        {
            "MessageId": "f7a2d8cf-67e6-4ff8-b948-0c0ecc3c7a17",
            "ReceiptHandle": "AQEBAVQVfX5Ipy+XSh8AMpGjtxzt99xeeOOTjkDYk/jfzwBfEhWQ57aUaBSW+k5c2u3peKWjKT6z4+TVgoHgcHzCsKjyKnexGjbGEJWKuvWmk4/zBrbbHx0cwvrlo15Cq+37VRRSyUYAwNbwPtZ2zx9n7xbaVfY5OTB1o4NENL3AN0xnCVYSZMe0VKe/6Li2ZlhDvyacosd/Y/jo5Psj4H+gSQ4+jf8+nicYuXb3BtVtWeMZ/OhY4qs11uCrzuhgWZOMrhf80X6a09luodndVGdv9Q==",
            "MD5OfBody": "68390233272823b7adf13a1db79b2cd7",
            "Body": "Message 1"
        }
    ]
}

Die Nachricht muss innerhalb von 30 Sek. (Standard VisibilityTimeout) gelöscht werden, damit sie nicht erneut an Empfänger zugestellt wird.

:~$ docker run --rm -it -v ~/aws-cli:/root/.aws amazon/aws-cli sqs delete-message --queue-url https://sqs.eu-west-1.amazonaws.com/XXXXXXYYYYYY/test.fifo --receipt-handle AQEBAVQVfX5Ipy+XSh8AMpGjtxzt99xeeOOTjkDYk/jfzwBfEhWQ57aUaBSW+k5c2u3peKWjKT6z4+TVgoHgcHzCsKjyKnexGjbGEJWKuvWmk4/zBrbbHx0cwvrlo15Cq+37VRRSyUYAwNbwPtZ2zx9n7xbaVfY5OTB1o4NENL3AN0xnCVYSZMe0VKe/6Li2ZlhDvyacosd/Y/jo5Psj4H+gSQ4+jf8+nicYuXb3BtVtWeMZ/OhY4qs11uCrzuhgWZOMrhf80X6a09luodndVGdv9Q==

Zurück