Java AWS SQS Batch SendMessageBatchRequest速度非常慢

Java AWS SQS Batch SendMessageBatchRequest速度非常慢,java,amazon-web-services,Java,Amazon Web Services,我的应用程序使用SendMessageBatchRequest向AWS-SQS发送每个请求10条消息。每条消息的大小小于250字节。该应用程序预计每天发布大约一百万条记录。但是信息被发布的速度要达到这一点非常慢 AmazonSQS sqs = null; sqs = new AmazonSQSClient(new BasicAWSCredentials("accessKey", "SecretKey")); //the below entries are added via a for loop

我的应用程序使用SendMessageBatchRequest向AWS-SQS发送每个请求10条消息。每条消息的大小小于250字节。该应用程序预计每天发布大约一百万条记录。但是信息被发布的速度要达到这一点非常慢

AmazonSQS sqs = null;
sqs = new AmazonSQSClient(new BasicAWSCredentials("accessKey", "SecretKey"));
//the below entries are added via a for loop picking the messages from a queue
//the typical queue size will be 20k messages
//AmazonSQSClient is created once and is used until the code comes out of the for loop

List<SendMessageBatchRequestEntry> entries = new ArrayList<SendMessageBatchRequestEntry>();
entries.add(new SendMessageBatchRequestEntry(messageBatchRequestId, "250kbJSONString"));
 //Once the batch count reaches 10,the following code is called 

CreateQueueRequest createQueueRequest = new CreateQueueRequest("CLIENT-TEST");
String myQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();

SendMessageBatchRequest sendMessageBatchRequest = new    SendMessageBatchRequest(myQueueUrl);

sendMessageBatchRequest.setEntries(entries);
long timeBeforePost = System.currentTimeMillis();
SendMessageBatchResult smbResult = sqs.sendMessageBatch(sendMessageBatchRequest);
long afterPost = System.currentTimeMillis();
log.trace("time taken %s ",(afterPost-timeBeforePost));
有些帖子需要7秒、16秒等时间才能返回,这正常吗?我有一些帖子需要300秒才能从方法调用返回。我是否遗漏了什么,我的应用程序目前是单线程的,我计划使它成为多线程的,以并行方式处理消息,但同样,有些消息需要几秒钟,有些消息需要几十秒/数百秒,这是严重错误的。请帮忙


非常感谢,我的第一个猜测是您的本地计算机和SQS之间存在延迟问题,SQS处理传入消息的速度肯定比您看到的数字快得多


也许最好的办法是将一个EC2实例启动几个小时,大小与您的本地计算机相似,并进行相同的测试以查看问题是否消失。

考虑创建一个AmazonSQS客户端,并对每个请求重复使用它。客户机提供连接池并保持连接打开以优化重用。它也可能在查找区域以查找要连接的端点。最好在整个应用程序中重用aws客户端,而不是针对每个请求

SDK中的服务客户端是线程安全的,为了获得最佳性能,您应该将它们视为长寿命对象。每个客户端都有自己的连接池资源,当客户端被垃圾收集时,连接池资源将关闭


在哪里进行发布?是EC2实例还是本地的?如果是EC2,您的实例有多大?它不是EC2。本地机器:型号名称:英特尔(R)至强(R)CPU E5320@1.86GHz 16G内存。该应用程序正在apache Tomcat实例上运行,内存为2G
time taken 57
time taken 37
time taken 31
time taken 322
time taken 48
time taken 153
time taken 278
time taken 86
time taken 35
time taken 28
time taken 30
time taken 57
time taken 43
time taken 314
time taken 5587
time taken 42
time taken 4789
time taken 4831
time taken 66
time taken 6239
time taken 50
time taken 38
time taken 4833
time taken 40
time taken 4896
time taken 27
time taken 16634