AWS SQS Batch SendMessageBatchRequest 非常慢

2024-05-13

我的应用程序使用 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(使用前将#替换为@)

AWS SQS Batch SendMessageBatchRequest 非常慢 的相关文章

  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 图像在 3D 空间中绕 Y 轴旋转

    我有一个 BufferedImage 我想用 theta 角而不是仿射变换绕 Java 中的 Y 轴旋转图像 图片 旋转将如下图所示 矩形将是图像 我可以通过旋转图像的每个像素并绘制图像来做到这一点 因为我必须旋转很多图像 所以我认为这不是
  • bean 的 CDI @TransactionAttribute

    我正在尝试CDI在测试应用程序上 我有一个DAO它注入一个托管的容器JTA像这样的持久化上下文 public class TestDAO implements Serializable PersistenceContext private
  • 在 alpine / Jprofile 10 中运行 jpenable 时出现 UnsatisfiedLinkError

    当运行 jpenable 以允许在运行 JDK 8 的 alpine 3 3 容器中对 Jprofiler10 进行分析时 我收到 UnsatisfiedLinkError 异常 有任何想法吗 ERROR The agent could n
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 如何从 Java 生产代码中删除调试语句

    编译器是否可以从生产代码中删除用于调试目的 例如日志记录 的语句 调试语句需要以某种方式进行标记 可能使用注释 设置属性 debug true 并在每个调试语句中检查它很容易 但这会降低性能 如果编译器能够简单地使调试语句消失 那就太好了
  • 字符串 a == 字符串 b 的规则 [重复]

    这个问题在这里已经有答案了 我试图了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是什么 例如这个片段 public static void main String hi String s1 lol String s2 lol S
  • 是否可以在使用 AWS DMS 迁移期间转换数据

    使用 AWS Data Migration Service 执行迁移时是否可以转换实际数据 我正在尝试将数据从 PostgreSQL 迁移到 DynamoDB 并向通过 DMS 带来的数据附加前缀 据我所知 迁移任务中可用的所有转换规则似乎
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • 在 Hibernate 的 XML 配置文件中指定默认值

    我通过映射配置文件配置 Hibernate
  • Java中如何将Object[]转换为String[]?

    我有一个关于 Java 的问题 我有一个Object Java默认的 不是用户定义的 我想将它转换为String 谁能帮我 谢谢 这是转换 for int i 0 i lt objectArr length i try strArr i o
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • 使用替换但不使用根元素的 Jaxb 继承

    我正在浏览布莱斯的博客http blog bdoughan com 2010 11 jaxb and inheritance using substitution html http blog bdoughan com 2010 11 ja
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List

随机推荐