Správa frontov Amazon SQS v Jave

1. Prehľad

V tomto výučbe sa dozvieme, ako na to používať Amazon SQS (Simple Queue Service) pomocou Java SDK.

2. Predpoklady

Závislosti Maven, nastavenia účtu AWS a pripojenie klienta potrebné na použitie súpravy Amazon AWS SDK pre SQS sú rovnaké ako v tomto článku tu.

Za predpokladu, že sme vytvorili inštanciu Poverenia AWS, ako je popísané v predchádzajúcom článku, môžeme pokračovať a vytvoriť si nášho klienta SQS:

AmazonSQS sqs = AmazonSQSClientBuilder.standard () .withCredentials (nové AWSStaticCredentialsProvider (poverenia)). SRegion (Regions.US_EAST_1) .build (); 

3. Vytváranie front

Len čo nastavíme nášho klienta SQS, vytváranie front je pomerne jednoduché.

3.1. Vytvorenie štandardného frontu

Pozrime sa, ako môžeme vytvoriť štandardnú frontu. Urobiť toto, budeme musieť vytvoriť inštanciu CreateQueueRequest:

CreateQueueRequest createStandardQueueRequest = nový CreateQueueRequest ("baeldung-queue"); Reťazec standardQueueUrl = sqs.createQueue (createStandardQueueRequest) .getQueueUrl (); 

3.2. Vytvorenie frontu FIFO

Vytvorenie FIFO je podobné vytvoreniu štandardnej fronty. Stále budeme používať inštanciu CreateQueueRequest, ako sme to robili predtým. Iba tentoraz, budeme musieť odovzdať atribúty frontu a nastaviť FifoQueue atribút pravda:

Mapa queueAttributes = new HashMap (); queueAttributes.put ("FifoQueue", "true"); queueAttributes.put ("ContentBasedDeduplication", "true"); CreateQueueRequest createFifoQueueRequest = nový CreateQueueRequest ("baeldung-queue.fifo"). WithAttributes (queueAttributes); Reťazec fifoQueueUrl = sqs.createQueue (createFifoQueueRequest) .getQueueUrl (); 

4. Uverejňovanie správ do front

Hneď ako nastavíme svoje fronty, môžeme začať posielať správy.

4.1. Uverejnenie správy v štandardnom fronte

Ak chcete posielať správy do štandardného radu, urobíme to musieť vytvoriť inštanciu SendMessageRequest.

Potom k tejto žiadosti pripojíme mapu atribútov správ:

Map messageAttributes = new HashMap (); messageAttributes.put ("AttributeOne", nové MessageAttributeValue () .withStringValue ("Toto je atribút") .withDataType ("String")); SendMessageRequest sendMessageStandardQueue = new SendMessageRequest () .withQueueUrl (standardQueueUrl) .withMessageBody ("Jednoduchá správa.") .WithDelaySeconds (30) .withMessageAttributes (messageAttributes); sqs.sendMessage (sendMessageStandardQueue); 

The withDelaySeconds () určuje, ako dlho má správa doraziť do frontu.

4.2. Uverejnenie správy do frontu FIFO

Jediný rozdiel je v tomto prípade ten budeme musieť špecifikovať skupina do ktorej správa patrí:

SendMessageRequest sendMessageFifoQueue = nový SendMessageRequest () .withQueueUrl (fifoQueueUrl) .withMessageBody ("Ďalšia jednoduchá správa.") .WithMessageGroupId ("baeldung-group-1") .withMessageAttributy (messageAttributes)

Ako môžete vidieť v príklade kódu vyššie, skupinu zadáme pomocou withMessageGroupId ().

4.3. Uverejnenie viacerých správ do frontu

Môžeme tiež odoslať viac správ do frontu pomocou jednej žiadosti. Vytvoríme zoznam SendMessageBatchRequestEntry ktoré pošleme pomocou inštancie SendMessageBatchRequest:

Zoznam messageEntries = nový ArrayList (); messageEntries.add (new SendMessageBatchRequestEntry () .withId ("id-1") .withMessageBody ("batch-1") .withMessageGroupId ("baeldung-group-1")); messageEntries.add (new SendMessageBatchRequestEntry () .withId ("id-2") .withMessageBody ("batch-2") .withMessageGroupId ("baeldung-group-1")); SendMessageBatchRequest sendMessageBatchRequest = nový SendMessageBatchRequest (fifoQueueUrl, messageEntries); sqs.sendMessageBatch (sendMessageBatchRequest);

5. Čítanie správ z front

Môžeme dostávať správy z našich frontov do s odvolaním sa na receiveMessage () metóda na príklade ReceiveMessageRequest:

ReceiveMessageRequest receiveMessageRequest = nový ReceiveMessageRequest (fifoQueueUrl) .withWaitTimeSeconds (10) .withMaxNumberOfMessages (10); Zoznam sqsMessages = sqs.receiveMessage (receiveMessageRequest) .getMessages (); 

Použitím withMaxNumberOfMessages (), určujeme, koľko správ sa má z frontu dostať - treba však poznamenať, že maximum je 10.

Metóda withWaitTimeSeconds () umožňuje dlho voliť. Dlhé dotazovanie je spôsob, ako obmedziť počet žiadostí o správu, ktoré pošleme na SQS.

Jednoducho povedané, znamená to, že na načítanie správy počkáme až do zadaného počtu sekúnd. Ak vo fronte nie sú po túto dobu žiadne správy, žiadosť sa vráti prázdna. Ak počas tejto doby príde správa do frontu, vráti sa.

Môžeme získať atribúty a text danej správy:

sqsMessages.get (0) .getAttributes (); sqsMessages.get (0) .getBody ();

6. Vymazanie správy z frontu

Na odstránenie správy použijeme a DeleteMessageRequest:

sqs.deleteMessage (new DeleteMessageRequest () .withQueueUrl (fifoQueueUrl) .withReceiptHandle (sqsMessages.get (0) .getReceiptHandle ())); 

7. Fronty nedoručených listov

Poradie nedoručených listov musí byť rovnakého typu ako jeho základný rad - musí to byť FIFO, ak je základný front FIFO, a štandardný, ak je základný front štandardný. V tomto príklade použijeme štandardný rad.

Prvá vec, ktorú musíme urobiť, je urobiť vytvorte, čo sa stane našim frontom nedoručených listov:

Reťazec deadLetterQueueUrl = sqs.createQueue ("baeldung-dead-letter-queue"). GetQueueUrl (); 

Ďalej budeme získajte ARN (názov zdroja Amazon) nášho novo vytvoreného frontu:

GetQueueAttributesResult deadLetterQueueAttributes = sqs.getQueueAttributes (nový GetQueueAttributesRequest (deadLetterQueueUrl) .withAttributeNames ("QueueArn")); Reťazec deadLetterQueueARN = deadLetterQueueAttributes.getAttributes () .get ("QueueArn"); 

Nakoniec sme nastaviť tento novovytvorený front ako front mŕtvych listov nášho pôvodného štandardného frontu:

SetQueueAttributesRequest queueAttributesRequest = nový SetQueueAttributesRequest () .withQueueUrl (standardQueueUrl) .addAttributesEntry ("RedrivePolicy", "{\" maxReceiveCount \ ": \" 2 \ "," + "\" deadLetter "}"); sqs.setQueueAttributes (queueAttributesRequest); 

Paket JSON, ktorý sme nastavili v addAttributesEntry () metóda pri stavbe nášho SetQueueAttributesRequest inštancia obsahuje informácie, ktoré potrebujeme: the maxReceiveCount je 2, čo znamená, že ak správu prijmete toľkokrát, predpokladá sa, že nebola správne spracovaná, a bude odoslaná do nášho frontu nedoručených správ.

The deadLetterTargetArn atribút ukazuje náš štandardný rad na náš novovytvorený rad nedoručených listov.

8. Monitorovanie

Môžeme skontrolujte, koľko správ sa momentálne nachádza v danom rade a koľko ich práve letí, pomocou SDK. Najskôr budeme musieť vytvoriť GetQueueAttributesRequest.

Odtiaľ skontrolujeme stav fronty:

GetQueueAttributesRequest getQueueAttributesRequest = nový GetQueueAttributesRequest (standardQueueUrl) .withAttributeNames ("Všetko"); GetQueueAttributesResult getQueueAttributesResult = sqs.getQueueAttributes (getQueueAttributesRequest); System.out.println (String.format ("Počet správ vo fronte:% s", getQueueAttributesResult.getAttributes () .get ("PribližnéČísloOdkazov"))); System.out.println (String.format ("Počet správ v lete:% s", getQueueAttributesResult.getAttributes () .get ("PribližnéČísloOfMessagesNotivisle")));

Podrobnejšie sledovanie je možné dosiahnuť pomocou služby Amazon Cloud Watch.

9. Záver

V tomto článku sme videli, ako na to spravujte fronty SQS pomocou AWS Java SDK.

Ako obvykle, všetky ukážky kódu použité v článku nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found