amazon-web-services - 是否可以多次从 AWS SQS 加载相同的消息
问题描述
我有一个 SQS FIFO 队列,我们发送一堆 id 以在另一端进行处理。我们有 4 名工人在消化消息。一旦 worker 接收到消息,它会删除 msg 并存储这些 id,直到它在执行操作之前达到限制。
我注意到的是,当每个 id 只发送一次时,一些 id 会被多次接收。正常吗?
解决方案
您当前的流程似乎是:
- 工作人员从队列中拉(接收)消息
- 它删除消息
- 它对消息执行操作
这不是使用队列的推荐方式,因为工作人员可能在删除消息之后但在完成操作之前失败。因此,该消息将“丢失”。
使用队列的推荐方法是:
- 从队列中拉出一条消息(使消息暂时不可见)
- 处理消息
- 删除消息
这样,如果worker在处理消息时失败了,它会在隐身期过后自动“重新出现”在队列中。工作人员还可以发送“仍在工作”信号,以使消息在处理过程中更长时间不可见。
Amazon SQS FIFO 队列提供一次性处理。这意味着一条消息只会被传递一次。(但是,如果在消息被删除之前隐身期到期,则会再次提供。)
您说“某些 id 被多次接收”。我建议添加调试代码以尝试了解发生这种情况的情况,因为如果在不可见期间删除消息,则不应该发生这种情况。
推荐阅读
- arrays - 检查numpy数组中的重复项
- r - 在 R 中隐藏未选择的 visNetwork 节点
- html - 我应该使用什么定位器来获取在 Selenium 中切换页面的元素列表?
- java - Activity 中的 LiveData、setValue 和片段中的观察。可能吗?
- android - google play 控制台无法识别打包在 android app bundle 文件 (.aab) 中的调试符号和映射文件
- javascript - Express Nodejs S3 上传到三个不同的目录
- r - 加载 ade4 和 adegenet 包时出现问题
- javascript - 错误“未捕获的类型错误:无法读取未定义的属性 'bannable'”
- r - 使用多组上限和下限创建置信区间比较图
- vue.js - vue 在点击时渲染组件