首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQS + Shoryuken:尽管有auto_delete=true,但FIFO中的接收计数很大

SQS + Shoryuken:尽管有auto_delete=true,但FIFO中的接收计数很大
EN

Stack Overflow用户
提问于 2018-12-12 20:10:18
回答 1查看 989关注 0票数 1

我配置了一个AWS队列,用于根据内容去复制消息。我的rails应用程序使用矮人工人从SQS获取消息。以下是工作代码:

代码语言:javascript
复制
class MyJob
  include Shoryuken::Worker

  shoryuken_options queue: "myjobs-#{ENV['RAILS_ENV']}.fifo",
                    auto_delete: true,
                    body_parser: JSON

  def perform(message_meta, message_body)
    # do stuff
  end
end

如您所见,一旦收到消息,它就被配置为自动删除队列中的消息。但今天发生了一些奇怪的事情。我注意到该工人执行大量相同的任务。当我在AWS控制台中打开SQS队列时,我看到其中有一条消息,它看起来是被工作人员多次接收的。下面是它的属性,注意接收计数:

消息ID: 9207017f-ad15-4de8-97c4-cf391c8f3840 大小: 1.3 KB 身体MD5 :55918bf431e31e4 badae0720453aea 35 发送时间: 2018-12-11 10:40:53.978格林尼治时间-08:00 首次收到: 2018-12-11 10:40:54.045格林尼治时间-08:00 接收计数: 2654 消息属性计数:0 消息组ID:默认消息 去重叠ID: c5fb9acda5e3c9c82dc0ae3f0b1cff5bd7067d0cf942075c4c38dddd1fbc1ed1 序列号: 37288893882837472512

知道怎么会发生这种事吗?

平台详细信息: Ubuntu,ruby 2.5.3,Rails: 5.2.2,Shoryuken: 4.0.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 20:34:37

结果,问题在于队列的VisibilityTimeout设置。默认情况下,它被设置为30秒,但通常消息会在允许的30秒之外到达接收方,这意味着收到的消息将无法从队列中删除,出现以下错误:

错误:无法删除0,代码:“ReceiptHandleIsIn有效值”,消息:“收据句柄已过期”,sender_fault: true

解决方案是增加VisibilityTimeout。我把它设置为最长12小时,这解决了这个问题。

更多关于VisibilityTimeout:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html的信息

让我走上正轨的线索:https://github.com/aws/aws-sdk-java/issues/705

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53750635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档