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.