Java 从SQS检索消息速度慢
给定一个Java AWS Lambda,其代码如下:Java 从SQS检索消息速度慢,java,performance,amazon-web-services,amazon-sqs,Java,Performance,Amazon Web Services,Amazon Sqs,给定一个Java AWS Lambda,其代码如下: private static final String QUEUE_URL = "https://sqs.us-east-1.amazonaws.com/<ACCT_NUMBER>/<QUEUE_NAME>"; private static final AmazonSQS client = AmazonSQSClientBuilder.standard().build(); private static final i
private static final String QUEUE_URL = "https://sqs.us-east-1.amazonaws.com/<ACCT_NUMBER>/<QUEUE_NAME>";
private static final AmazonSQS client = AmazonSQSClientBuilder.standard().build();
private static final int MAX_SQS_MESSAGES = 10;
private静态最终字符串队列\u URL=”https://sqs.us-east-1.amazonaws.com//";
私有静态最终AmazonSQS客户端=AmazonSQSClientBuilder.standard().build();
专用静态最终int MAX_SQS_消息=10;
以及:
private List getMessages(){
返回client.receiveMessage(new ReceiveMessageRequest().withQueueUrl(QUEUE\u URL)
.withMaxNumberOfMessages(MAX_SQS_MESSAGES)。withWaitTimeSeconds(1)).getMessages();
}
我经历过相当长的SQS检索时间(考虑到长轮询的指定1秒基数),作为日志的样本证据:
- 获得3平方米MSG:1985ms
- 获得8平方米MSG:1887平方米
- 获得9平方米的MSG:2438平方米
- 获得5平方米的MSG:1748平方米
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.488</version>
</dependency>
亚马逊网站
aws java sdk sqs
1.11.488
这些确实是很长的延迟,有些地方出了问题。对于非空队列,您应该能够获得5-500毫秒范围内的典型读取(越低,可用消息越多)。即使您的队列是空的,根据您在请求中使用的withWaitTimeSeconds
,请求时间最多也应该达到1s左右
您可以采取许多步骤来缩小问题的范围:
- 创建实现
和afterError
的实现,并检查afterResponse
- 通过将该请求处理程序添加到客户端
- 这将为您提供请求如何花费时间的准确细节,并可能揭示一些明显的问题,还可能指向SQS调用之外的问题李>
withWaitTimeSeconds
,请求时间最多也应该达到1s左右
您可以采取许多步骤来缩小问题的范围:
- 创建实现
和afterError
的实现,并检查afterResponse
- 通过将该请求处理程序添加到客户端
- 这将为您提供请求如何花费时间的准确细节,并可能揭示一些明显的问题,还可能指向SQS调用之外的问题李>
关于#3:客户端是静态的final,lambda每2分钟运行一次,所以我想它会被重用,但我会设置日志记录。我测量的只是getMessages上面的一个包装器,而不是每次seLogging的客户机实例化表明客户机正在被重用,因此排除了该选项。删除了与1秒等待相关联的“长轮询”,总体性能要好得多。可能与我们的用例有关,队列中每个循环只有大约5-10个MSG。我将以这种方式保持它的工作和监视,并查看它在较长时间框架内的行为。关于#3:客户端是静态最终版,lambda每2分钟运行一次,所以我想它会被重用,但我会设置日志记录。我测量的只是getMessages上面的一个包装器,而不是每次seLogging的客户机实例化表明客户机正在被重用,因此排除了该选项。删除了与1秒等待相关联的“长轮询”,总体性能要好得多。可能与我们的用例有关,队列中每个循环只有大约5-10个MSG。我将以这种方式保持它的工作和监视,并查看它在更长时间内的行为
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.488</version>
</dependency>