我的应用程序使用 SendMessageBatchRequest 将每个请求发布 10 条消息到 AWS-SQS。每条消息的大小小于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));
捕获每个帖子所花费的时间(以毫秒为单位),这是典型的输出
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
有些帖子需要 7,16 秒等时间才能返回,这是正常的吗?我也有一些帖子需要 300 秒才能从方法调用返回。我是否在这里遗漏了一些东西,我的应用程序当前是单线程的,我打算制作它采用多线程并行处理消息,但有些消息需要几秒钟,有些消息需要数十/数百秒,这是严重错误的。请帮忙 。
万分感谢
我的第一个猜测是本地计算机和 SQS 之间的延迟问题,SQS 处理传入消息的速度肯定比您看到的数字快得多。
也许最好的选择是启动一个 EC2 实例几个小时,其大小与本地计算机相似,并进行相同的测试以查看问题是否消失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)