जावा क्लाइंट एप्लिकेशन का उपयोग करते हुए मैं संदेशों के लिए एक एसक्यूएस कतार का उपयोग कर रहा हूं। कतार में परीक्षण के लिए सेटअप के रूप में 12,000 संदेश हैं। मैं aj-java-sdk के साथ openJDK का उपयोग कर रहा हूं नवीनतम (software.amazon.awssdk 2.10.62) pom.xml को और नीचे दिखाया गया है।
मैं जो मुद्दा देख रहा हूं वह यह है कि सेट करने के बावजूद मैक्सनंबरऑफ़मैसेज (10) मुझे केवल 3 ही मिलते हैं। मैं समझता हूं कि यह अधिकतम संदेशों की संख्या की गारंटी नहीं है, हालांकि संदेशों की संख्या में कोई छूट नहीं है। यह हमेशा 3 है।
AWS डॉक्यूमेंटेशन: MaxNumberOfMessages अधिकतम संदेशों की वापसी। अमेज़न SQS इस मूल्य से अधिक संदेश कभी नहीं लौटाता है (हालाँकि, कम संदेश वापस आ सकते हैं)। मान्य मान: 1 से 10. डिफ़ॉल्ट: 1. प्रकार: पूर्णांक आवश्यक: नहीं
शॉर्ट पोलिंग का उपयोग कर संदेश भेजना
जब आप लघु मतदान का उपयोग करके एक कतार से संदेशों का उपभोग करते हैं, तो अमेज़ॅन एसक्यूएस अपने सर्वरों के सबसेट (एक भारित यादृच्छिक वितरण के आधार पर) का नमूना लेता है और केवल उन सर्वरों से संदेश देता है। इस प्रकार, एक विशेष ReceiveMessage अनुरोध आपके सभी संदेशों को वापस नहीं कर सकता है। हालाँकि, यदि आपके पास अपनी कतार में 1,000 से कम संदेश हैं, तो बाद का अनुरोध आपके संदेशों को वापस कर देगा। यदि आप अपनी कतारों से उपभोग करते रहते हैं, तो अमेज़ॅन एसक्यूएस अपने सभी सर्वरों का नमूना लेता है, और आपको अपने सभी संदेश प्राप्त होते हैं।
इसलिए हमने जावा में दो क्लाइंट्स का परीक्षण किया है और दोनों पुराने अर्स sdk और नए को समान परिणामों के साथ उपयोग किया है। हमेशा केवल 3 संदेश वापस।
दिलचस्प बात यह है कि यदि आवेदन को बाहरी रूप से चलाने के बजाय (मेरे शक्तिशाली डेस्कटॉप पर) आप इसे AWS लैंबडा के रूप में चलाते हैं तो आपको 10 संदेश मिलते हैं। यह लैम्ब्डा परीक्षण एक सहकर्मी द्वारा जावास्क्रिप्ट का उपयोग करके किया गया था।
तो सवाल यह है कि हमें केवल 3 संदेश प्रति अनुरोध क्यों मिलते हैं और लंबोदर के भीतर आपको 10 मिल सकते हैं।
यह देखते हुए कि अमेजन लाभ के आधार पर भारित यादृच्छिक वितरण है =))
SQS टेस्ट विधि:
public void SQStart()
{
AwsBasicCredentials awsCreds = AwsBasicCredentials.create("accessKeyID", "secretKeyID");
AwsCredentialsProvider creds = StaticCredentialsProvider.create(awsCreds);
SqsClient sqs = SqsClient.builder().credentialsProvider(creds).region(Region.EU_WEST_1).build();
GetQueueUrlRequest getQueueRequest = GetQueueUrlRequest.builder()
.queueName(QUEUE_NAME)
.build();
String queueUrl = sqs.getQueueUrl(getQueueRequest).queueUrl();
for (int x =1; x < 100; x++) {
ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(10)
.build();
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).messages();
if (messages.size() > 3 ) {
System.out.println("YEY More than 3 Messages: "+ messages.size());
}
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>SQSTest</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.10.62</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.720</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
</project>