ניהול תורי SQS של אמזון בג'אווה

1. סקירה כללית

במדריך זה נחקור כיצד השתמש ב- SQS של אמזון (Simple Queue Service) באמצעות Java SDK.

2. תנאים מוקדמים

התלות של Maven, הגדרות חשבון AWS וחיבור הלקוח הדרושים לשימוש ב- Amazon AWS SDK עבור SQS זהים למאמר זה כאן.

בהנחה שיצרנו מופע של אישורי AWS, כמתואר במאמר הקודם, נוכל להמשיך וליצור את לקוח SQS שלנו:

AmazonSQS sqs = AmazonSQSClientBuilder.standard () .withCredentials (AWSStaticCredentialsProvider חדש (אישורים)) .withRegion (Regions.US_EAST_1) .build (); 

3. יצירת תורים

לאחר שהקמנו את לקוח ה- SQS שלנו, יצירת תורים היא די פשוטה.

3.1. יצירת תור רגיל

בואו נראה איך נוכל ליצור תור רגיל. כדי לעשות זאת, נצטרך ליצור מופע של CreateQueueRequest:

CreateQueueRequest createStandardQueueRequest = CreateQueueRequest חדש ("תור באלדונג"); מחרוזת standardQueueUrl = sqs.createQueue (createStandardQueueRequest) .getQueueUrl (); 

3.2. יצירת תור FIFO

יצירת FIFO דומה ליצירת תור רגיל. אנו עדיין נשתמש במופע של CreateQueueRequest, כפי שעשינו בעבר. רק הפעם, נצטרך לעבור בתכונות תור ולהגדיר את FifoQueue מייחס ל נָכוֹן:

מפה queueAttributes = HashMap חדש (); queueAttributes.put ("FifoQueue", "true"); queueAttributes.put ("ContentBasedDeduplication", "true"); CreateQueueRequest createFifoQueueRequest = חדש CreateQueueRequest ("baeldung-queue.fifo"). WithAttributes (queueAttributes); מחרוזת fifoQueueUrl = sqs.createQueue (createFifoQueueRequest) .getQueueUrl (); 

4. פרסום הודעות בתורים

לאחר שהגדרנו את התורים שלנו, נוכל להתחיל לשלוח הודעות.

4.1. פרסום הודעה לתור רגיל

כדי לשלוח הודעות לתור רגיל, אנו צריך ליצור מופע של SendMessageRequest.

לאחר מכן אנו מצרפים מפה של מאפייני הודעות לבקשה זו:

Message messageAttributes = HashMap חדש (); messageAttributes.put ("AttributeOne", MessageAttributeValue חדש () .withStringValue ("זו תכונה") .withDataType ("String")); SendMessageRequest sendMessageStandardQueue = חדש SendMessageRequest () .withQueueUrl (standardQueueUrl) .withMessageBody ("הודעה פשוטה.") .WithDelaySeconds (30) .withMessageAttributes (הודעה מאפיינים); sqs.sendMessage (sendMessageStandardQueue); 

ה withDelaySeconds () מציין לאחר כמה זמן ההודעה צריכה להגיע לתור.

4.2. פרסום הודעה לתור FIFO

ההבדל היחיד, במקרה זה, הוא בכך נצטרך לציין את קְבוּצָה שאליו שייכת ההודעה:

SendMessageRequest sendMessageFifoQueue = SendMessageRequest חדש () .withQueueUrl (fifoQueueUrl) .withMessageBody ("עוד הודעה פשוטה.") .WithMessageGroupId ("baeldung-group-1") .withMessageAttributes (messagettribute)

כפי שניתן לראות בדוגמת הקוד לעיל, אנו מציינים את הקבוצה באמצעות withMessageGroupId ().

4.3. פרסום הודעות מרובות בתור

אנחנו יכולים גם פרסם מספר הודעות בתור, באמצעות בקשה אחת. ניצור רשימה של SendMessageBatchRequestEntry שנשלח באמצעות מופע של SendMessageBatchRequest:

רשימת messageEntries = ArrayList חדש (); messageEntries.add (SendMessageBatchRequestEntry חדש () .withId ("id-1") .withMessageBody ("batch-1") .withMessageGroupId ("baeldung-group-1")); messageEntries.add (חדש SendMessageBatchRequestEntry () .withId ("id-2") .withMessageBody ("batch-2") .withMessageGroupId ("baeldung-group-1")); SendMessageBatchRequest sendMessageBatchRequest = SendMessageBatchRequest חדש (fifoQueueUrl, messageEntries); sqs.sendMessageBatch (sendMessageBatchRequest);

5. קריאת הודעות מתורים

אנחנו יכולים לקבל הודעות מהתורים שלנו עד הפעלת ה קבל הודעה () שיטה על מופע של ReceiveMessageRequest:

ReceiveMessageRequest receiveMessageRequest = חדש ReceiveMessageRequest (fiveoQueueUrl) .withWaitTimeSeconds (10) .withMaxNumberOfMessages (10); רשום sqsMessages = sqs.receiveMessage (receiveMessageRequest) .getMessages (); 

באמצעות withMaxNumberOfMessages (), אנו מציינים כמה הודעות לקבל מהתור - אם כי יש לציין כי המקסימום הוא 10.

השיטה withWaitTimeSeconds () מאפשר קלפי ארוך. סקרים ארוכים הם דרך להגביל את מספר הבקשות לקבלת הודעות שאנו שולחים ל- SQS.

במילים פשוטות, פירוש הדבר שנחכה עד למספר השניות שצוין בכדי לאחזר הודעה. אם אין הודעות בתור למשך אותו זמן, הבקשה תחזור ריקה. אם תגיע הודעה לתור במהלך אותה תקופה, היא תוחזר.

אנחנו יכולים קבל את התכונות והגוף של הודעה נתונה:

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

6. מחיקת הודעה מתור

כדי למחוק הודעה, נשתמש ב- DeleteMessageRequest:

sqs.deleteMessage (חדש DeleteMessageRequest () .withQueueUrl (fifoQueueUrl) .withReceiptHandle (sqsMessages.get (0) .getReceiptHandle ())); 

7. תורי מכתבים מתים

תור לאות מת חייב להיות מאותו סוג כמו תור הבסיס שלו - זה חייב להיות FIFO אם תור הבסיס הוא FIFO, וסטנדרטי אם תור הבסיס הוא סטנדרטי. לדוגמא זו נשתמש בתור רגיל.

הדבר הראשון שעלינו לעשות הוא לעשות זאת צור את מה שיהפוך לתור האותיות המתים שלנו:

מחרוזת deadLetterQueueUrl = sqs.createQueue ("תור baeldung-dead-letter-letter"). GetQueueUrl (); 

הבא, אנחנו קבל את התור החדש שלנו שנוצר ARN (שם המשאב של אמזון):

GetQueueAttributesResult deadLetterQueueAttributes = sqs.getQueueAttributes (חדש GetQueueAttributesRequest (deadLetterQueueUrl) .withAttributeNames ("QueueArn")); מחרוזת deadLetterQueueARN = deadLetterQueueAttributes.getAttributes () .get ("QueueArn"); 

לבסוף, אנחנו הגדירו את התור החדש שנוצר להיות התור המקורי לתור הרגיל שלנו:

SetQueueAttributesRequest queueAttributesRequest = חדש SetQueueAttributesRequest () .withQueueUrl (standardQueueUrl) .addAttributesEntry ("RedrivePolicy", "{\" maxReceiveCount \ ": \" 2 \ "," + "\" deadLetterTargetrn: \ " "}"); sqs.setQueueAttributes (queueAttributesRequest); 

חבילת JSON שקבענו ב addAttributesEntry () שיטה בעת בניית שלנו SetQueueAttributesRequest מופע מכיל את המידע הדרוש לנו: ה maxReceiveCount הוא 2מה שאומר שאם מתקבלת הודעה זו פעמים רבות, ההנחה היא שלא עובדה כהלכה ונשלחת לתור המכתבים המתים שלנו.

ה deadLetterTargetArn תכונה מצביע על התור הסטנדרטי שלנו לתור החדש שלנו שנוצר באותיות מתות.

8. ניטור

אנחנו יכולים בדוק כמה הודעות נמצאים כרגע בתור נתון, וכמה טסים עם ה- SDK. ראשית, נצטרך ליצור GetQueueAttributesRequest.

משם נבדוק את מצב התור:

GetQueueAttributesRequest getQueueAttributesRequest = חדש GetQueueAttributesRequest (standardQueueUrl) .withAttributeNames ("הכל"); GetQueueAttributesResult getQueueAttributesResult = sqs.getQueueAttributes (getQueueAttributesRequest); System.out.println (String.format ("מספר ההודעות בתור:% s", getQueueAttributesResult.getAttributes () .get ("ApproximateNumberOfMessages"))); System.out.println (String.format ("מספר ההודעות בטיסה:% s", getQueueAttributesResult.getAttributes () .get ("ApproximateNumberOfMessagesNotVisible")));

ניתן להשיג ניטור מעמיק יותר באמצעות Amazon Cloud Watch.

9. מסקנה

במאמר זה ראינו כיצד לנהל תורי SQS באמצעות AWS Java SDK.

כרגיל, ניתן למצוא את כל דגימות הקוד המשמשות במאמר ב- GitHub.


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