Az Amazon SQS várólisták kezelése Java-ban

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk, hogyan lehet használja az Amazon SQS-jét (Simple Queue Service) a Java SDK használatával.

2. Előfeltételek

Az Amazon AWS SDK SQS-hez való használatához szükséges Maven-függőségek, AWS-fiókbeállítások és klienskapcsolat megegyeznek a jelen cikkben leírtakkal.

Feltéve, hogy létrehoztunk egy példányt AWSCredentials, az előző cikkben leírtak szerint folytathatjuk az SQS kliens létrehozását:

AmazonSQS sqs = AmazonSQSClientBuilder.standard () .withCredentials (új AWSStaticCredentialsProvider (hitelesítő adatok)) .withRegion (Regions.US_EAST_1) .build (); 

3. Sorok létrehozása

Miután beállítottuk SQS kliensünket, a sorok létrehozása meglehetősen egyszerű.

3.1. Normál várólista létrehozása

Lássuk, hogyan hozhatunk létre Standard sort. Ezt csináld meg, létre kell hoznunk a CreateQueueRequest:

CreateQueueRequest createStandardQueueRequest = new CreateQueueRequest ("baeldung-queue"); String standardQueueUrl = sqs.createQueue (createStandardQueueRequest) .getQueueUrl (); 

3.2. FIFO-sor létrehozása

A FIFO létrehozása hasonló a Standard várólista létrehozásához. Továbbra is használjuk a CreateQueueRequest, ahogy korábban tettük. Csak ezúttal, át kell adnunk a sor attribútumait, és be kell állítanunk a FifoQueue tulajdonít neki igaz:

Map queueAttributes = new HashMap (); queueAttributes.put ("FifoQueue", "true"); queueAttributes.put ("ContentBasedDeduplication", "true"); CreateQueueRequest createFifoQueueRequest = new CreateQueueRequest ("baeldung-queue.fifo"). WithAttributes (queueAttributes); String fifoQueueUrl = sqs.createQueue (createFifoQueueRequest) .getQueueUrl (); 

4. Üzenetek feladása a várólistákon

Miután beállítottuk a sorainkat, elkezdhetünk üzeneteket küldeni.

4.1. Üzenet feladása normál várólistára

Ha üzeneteket akarunk küldeni egy szokásos sorba, megtesszük létre kell hoznia egy példányát SendMessageRequest.

Ezután csatoljuk az üzenetattribútumok térképét ehhez a kéréshez:

Map messageAttributes = new HashMap (); messageAttributes.put ("AttributeOne", új MessageAttributeValue () .withStringValue ("Ez egy attribútum") .withDataType ("String")); SendMessageRequest sendMessageStandardQueue = new SendMessageRequest () .withQueueUrl (standardQueueUrl) .withMessageBody ("Egyszerű üzenet.") .WithDelaySeconds (30) .withMessageAttributes (messageAttributes); sqs.sendMessage (sendMessageStandardQueue); 

A withDelaySeconds () meghatározza, hogy mennyi idő után érkezzen az üzenet a várólistára.

4.2. Üzenet feladása a FIFO várólistára

Az egyetlen különbség ebben az esetben az meg kell adnunk a csoport amelyhez az üzenet tartozik:

SendMessageRequest sendMessageFifoQueue = new SendMessageRequest () .withQueueUrl (fifoQueueUrl) .withMessageBody ("Egy másik egyszerű üzenet.") .WithMessageGroupId ("baeldung-group-1") .withMessageAttributes (message)

Amint az a fenti kód példában látható, a csoport használatával adjuk meg aMessageGroupId () paranccsal.

4.3. Több üzenet feladása várólistán

Azt is megtehetjük küldjön több üzenetet egy sorba, egyetlen kérés felhasználásával. Létrehozunk egy listát SendMessageBatchRequestEntry aminek egy példányát elküldjük SendMessageBatchRequest:

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

5. Üzenetek olvasása a várólistákról

Üzeneteket fogadhatunk várólistánkról a fogadniMessage () metódus a ReceiveMessageRequest:

ReceiveMessageRequest ReceiveMessageRequest = new ReceiveMessageRequest (fifoQueueUrl) .withWaitTimeSeconds (10) .withMaxNumberOfMessages (10); Lista sqsMessages = sqs.receiveMessage (ReceiveMessageRequest) .getMessages (); 

Használata withMaxNumberOfMessages (), megadjuk, hogy hány üzenetet kapjon a sorból - bár meg kell jegyezni, hogy a maximum 10.

A módszer, a metódus withWaitTimeSeconds () lehetővé teszi hosszú szavazás. A hosszú lekérdezés egy módja annak, hogy korlátozzuk az SQS-nek küldött fogadási üzenet kérelmek számát.

Egyszerűen fogalmazva, ez azt jelenti, hogy a megadott másodpercekig várunk egy üzenet letöltésére. Ha az adott időtartamig nincsenek üzenetek a sorban, akkor a kérés üresen jelenik meg. Ha ez idő alatt egy üzenet érkezik a sorba, azt visszaküldi.

Tudunk kapja meg az adott üzenet attribútumait és törzsét:

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

6. Üzenet törlése a várólistáról

Üzenet törléséhez a DeleteMessageRequest:

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

7. Holt levéllista

A halott betűsornak ugyanolyan típusúnak kell lennie, mint az alapsornak - FIFO-nak kell lennie, ha az alapsor FIFO, és szabványosnak, ha az alapsor standard. Ebben a példában egy szokásos várólistát fogunk használni.

Az első dolog, amit meg kell tennünk, az hozza létre azt, ami a holt betűsorunkká válik:

String deadLetterQueueUrl = sqs.createQueue ("baeldung-dead-letter-queue"). GetQueueUrl (); 

Ezután megtesszük megkapja az újonnan létrehozott várólista ARN-ját (Amazon Resource Name):

GetQueueAttributesResult deadLetterQueueAttributes = sqs.getQueueAttributes (új GetQueueAttributesRequest (deadLetterQueueUrl) .withAttributeNames ("QueueArn")); String deadLetterQueueARN = deadLetterQueueAttributes.getAttributes () .get ("QueueArn"); 

Végül mi állítsa be ezt az újonnan létrehozott sort az eredeti szokásos várólistánk halott betűsorának:

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

A JSON csomag, amelyet beállítottunk a addAttributesEntry () módszer a mi építésénél SetQueueAttributesRequest példány tartalmazza a szükséges információkat: a maxReceiveCount van 2, ami azt jelenti, hogy ha egy üzenetet ilyen sokszor kapunk, akkor feltételezzük, hogy azt nem dolgoztuk fel helyesen, és elküldjük a holt levél sorunkba.

A deadLetterTargetArn a szokásos várólistánkat az újonnan létrehozott halott betűsorhoz rendeljük.

8. Monitoring

Tudunk ellenőrizze, hány üzenet van jelenleg egy adott sorban, és hányan repülnek az SDK-val. Először létre kell hoznunk a GetQueueAttributesRequest.

Innen ellenőrizzük a sor állapotát:

GetQueueAttributesRequest getQueueAttributesRequest = új GetQueueAttributesRequest (standardQueueUrl) .withAttributeNames ("Mind"); GetQueueAttributesResult getQueueAttributesResult = sqs.getQueueAttributes (getQueueAttributesRequest); System.out.println (String.format ("A sorban lévő üzenetek száma:% s", getQueueAttributesResult.getAttributes () .get ("ApproximateNumberOfMessages"))); System.out.println (String.format ("Üzenetek száma repülés közben:% s", getQueueAttributesResult.getAttributes () .get ("ApproximateNumberOfMessagesNotVisible")));

Alaposabb megfigyelés érhető el az Amazon Cloud Watch használatával.

9. Következtetés

Ebben a cikkben megtudtuk, hogyan kell kezelheti az SQS-sorokat az AWS Java SDK használatával.

Szokás szerint a cikkben használt összes kódminta megtalálható a GitHubon.