为什么SqS消息有时仍在队列中进行

杰里科·桑德霍恩(Jerico Sandhorn)

我以一种非常简单的方式使用Amazon SQS队列。通常,消息被写入并立即可见和读取。有时,会写入一条消息,并在队列中保持飞行中(不可见)几分钟。我可以从控制台看到它。接收消息等待时间为0,默认可见性为5秒。它将保持这种状态几分钟,或者直到写入新消息以某种方式释放它为止。几秒钟的延迟是可以的,但超过60秒是不可以的。

这里有8个读取器线程,它们总是长时间轮询,因此它们不是某个东西在试图读取它。

编辑:明确地说,所有使用者读取都没有返回任何消息,并且无论控制台是否打开,它都会发生。在这种情况下,只涉及一条消息,它只是位于对消费者不可见的队列中。

有没有其他人看到过这种行为,以及我可以做些什么来改善它?

这是我正在使用的Java的SDK:

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.5.2</version>
</dependency>     

这是执行读取的代码(max = 10,maxwait = 0启动配置):

void read(MessageConsumer consumer) {

  List<Message> messages = read(max, maxWait);

  for (Message message : messages) {
    if (tryConsume(consumer, message)) {
      delete(message.getReceiptHandle());
    }
  }
}

private List<Message> read(int max, int maxWait) {

  AmazonSQS sqs = getClient();
  ReceiveMessageRequest rq = new ReceiveMessageRequest(queueUrl);
  rq.setMaxNumberOfMessages(max);
  rq.setWaitTimeSeconds(maxWait);
  List<Message> messages = sqs.receiveMessage(rq).getMessages();

  if (messages.size() > 0) {
    LOG.info("read {} messages from SQS queue",messages.size());
  }

  return messages;
}

发生这种情况时,永远不会出现“ read ..”的日志行,这是导致我进入控制台并查看消息是否存在的原因。

迈克尔-SQLbot

听起来您好像误解了所看到的。

“运行中”的消息没有等待发送,它们是已经发送但尚未由消费者采取进一步行动的消息。

如果消息已发送到客户端,但尚未删除或尚未到达其可见性窗口的末尾,则视为正在运行。

http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/sqs-metricscollected.html

当使用者收到一条消息时,它必须-在某个时候删除该消息,或发送请求以增加该消息的超时否则,超时后该消息将再次变为可见。如果消费者未执行这些操作之一,则该消息将自动再次变为可见。可见性超时是消费者必须完成这些操作之一之前的时间。

在没有收到消息的情况下,消息不应处于“运行中”状态-但“内容”可以包括控制台本身,正如您将注意到的那样,在弹出菜单中选择“查看/删除消息”时会看到弹出窗口。控制台(除非您已经选中“不再显示”复选框):

控制台停止轮询消息之前,控制台中显示的消息将对其他应用程序不可用。

控制台从“查看/删除消息”屏幕观察队列时,控制台中显示的消息“正在运行”。

如果您的默认可见性超时仅为5秒,并且代码中没有任何内容会增加该超时,则没有明显意义的部分是消息正在“运行几分钟”,但是...可以用以下方法完美地解释这一点:您的消费者没有正确处理该消息,导致该消息超时并立即重新传递,给人的印象是该消息的单个实例仍在运行中,而实际上,该消息只是短暂地过渡回可见状态,只是为了几乎立即被另一位消费者要求赔偿,然后又重新回到了机上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 Moq 有时需要在 Returns 中进行显式类型声明?

来自分类Dev

为什么在熊猫中进行元素操作时有时需要添加.value?

来自分类Dev

为什么在检索商店进行查询时,有时会收到InvalidStateStoreException PARTITIONS_REVOKED而不是RUNNING的消息?

来自分类Dev

为什么有时仍显示_site文件以进行提交?

来自分类Dev

为什么有时我会使用SQS客户端收到密钥错误

来自分类Dev

为什么 set object 有时对值进行排序,有时只是忽略顺序并将其放在最后?

来自分类Dev

为什么尽管使用`quiet`引导,有时仍会看到systemd状态消息?

来自分类Dev

为什么有时通过WebRTC发送的消息接收顺序不同?

来自分类Dev

为什么有时我们使用特定的位进行模板测试?

来自分类Dev

为什么Idris的Refl有时不进行类型检查?

来自分类Dev

为什么有时对字符串进行两次检查?

来自分类Dev

为什么有时使用基本类型作为基类进行编译?

来自分类Dev

为什么即使在useEffect()中进行清理,我的React组件仍在更新状态?

来自分类Dev

为什么git有时显示但有时却不显示消息“您的分支比n个提交领先于'whatever / upstream'?”

来自分类Dev

在Android中进行FCM集成时,为什么Firebase会导入所有内容?

来自分类Dev

为什么LINQ-to-SQL有时允许我使用功能进行项目开发,但有时却不允许呢?

来自分类Dev

为什么我有时不需要使用“get”而有时需要使用“get”进行过滤?

来自分类Dev

为什么有时“this”在 Vue 模板中有效而有时无效?

来自分类Dev

为什么有时找不到现有目录?

来自分类Dev

为什么函数有时返回0,有时返回false?

来自分类Dev

pip:为什么有时以鸡蛋形式安装,有时以文件形式安装

来自分类Linux

为什么max()有时返回nan而有时忽略它?

来自分类Dev

Python陈述式:有时为True,有时为False。为什么?

来自分类Dev

为什么有时我使用| 有时|| 在MATLAB中用于“或”?

来自分类Dev

为什么datetime对象有时返回日期,有时返回日期和时间?

来自分类Dev

为什么有时重定向(>)有时不起作用,而附加(>>)却起作用?

来自分类Dev

为什么网页有时在刷新前有时显示为纯HTML

来自分类Dev

为什么`:type`有时显示`a`,而有时显示`t`?

来自分类Dev

为什么有时我的UIBarButton粗体,有时又薄

Related 相关文章

  1. 1

    为什么 Moq 有时需要在 Returns 中进行显式类型声明?

  2. 2

    为什么在熊猫中进行元素操作时有时需要添加.value?

  3. 3

    为什么在检索商店进行查询时,有时会收到InvalidStateStoreException PARTITIONS_REVOKED而不是RUNNING的消息?

  4. 4

    为什么有时仍显示_site文件以进行提交?

  5. 5

    为什么有时我会使用SQS客户端收到密钥错误

  6. 6

    为什么 set object 有时对值进行排序,有时只是忽略顺序并将其放在最后?

  7. 7

    为什么尽管使用`quiet`引导,有时仍会看到systemd状态消息?

  8. 8

    为什么有时通过WebRTC发送的消息接收顺序不同?

  9. 9

    为什么有时我们使用特定的位进行模板测试?

  10. 10

    为什么Idris的Refl有时不进行类型检查?

  11. 11

    为什么有时对字符串进行两次检查?

  12. 12

    为什么有时使用基本类型作为基类进行编译?

  13. 13

    为什么即使在useEffect()中进行清理,我的React组件仍在更新状态?

  14. 14

    为什么git有时显示但有时却不显示消息“您的分支比n个提交领先于'whatever / upstream'?”

  15. 15

    在Android中进行FCM集成时,为什么Firebase会导入所有内容?

  16. 16

    为什么LINQ-to-SQL有时允许我使用功能进行项目开发,但有时却不允许呢?

  17. 17

    为什么我有时不需要使用“get”而有时需要使用“get”进行过滤?

  18. 18

    为什么有时“this”在 Vue 模板中有效而有时无效?

  19. 19

    为什么有时找不到现有目录?

  20. 20

    为什么函数有时返回0,有时返回false?

  21. 21

    pip:为什么有时以鸡蛋形式安装,有时以文件形式安装

  22. 22

    为什么max()有时返回nan而有时忽略它?

  23. 23

    Python陈述式:有时为True,有时为False。为什么?

  24. 24

    为什么有时我使用| 有时|| 在MATLAB中用于“或”?

  25. 25

    为什么datetime对象有时返回日期,有时返回日期和时间?

  26. 26

    为什么有时重定向(>)有时不起作用,而附加(>>)却起作用?

  27. 27

    为什么网页有时在刷新前有时显示为纯HTML

  28. 28

    为什么`:type`有时显示`a`,而有时显示`t`?

  29. 29

    为什么有时我的UIBarButton粗体,有时又薄

热门标签

归档