【项目】AWS 的 SQS 使用

864 阅读2分钟

队列类型

标准队列

AWS 默认的队列类型,一般业务上不要求消息的顺序性、接收端允许接收重复消息或者做了幂等处理的,用标准队列就够了。

  • 消息投递:at-least-once
  • 顺序性:尽量保证消息顺序
  • 吞吐量:允许近乎无限
  • 消息积压:不受限
  • 飞行消息(传输中的消息):最多 120000 条
  • 消息失败处理:持续处理消息,直到保留期结束(todo:重试间隔)

FIFO(先进先出)队列

业务上严格要求消息的顺序性,则需要选择 FIFO 队列。

FIFO 队列有消息组的概念,发送消息时可为消息指定消息组,同一个消息组中的消息始终保持消息的顺序性,不同消息组的消息可能会失序。

  • 消息投递:exactly-once
  • 顺序性:发送和接收消息的顺序一致
  • 吞吐量:允许近乎无限
  • 消息积压:不受限
  • 飞行消息(传输中的消息):最多20000 条
  • 消息失败处理:消息组会被阻塞,直到消息成功处理,但是其它消息组中的消息不受影响

标准队列和 FIFO 队列不能直接转换,即不能更改消息队列的类型,在必要情况下只能创建新的队列来代替旧队列。

队列配置

死信队列(DLQ)

将启用了死信队列的队列,称为死信队列,所以死信队列可以是标准队列,也可以是先进先出队列

死信队列中持有其它队列无法处理的消息(服务于其它消息队列),如果其它消息队列需要使用死信队列,则要先创建死信队列,再将其作为这个消息队列的死信队列。

死信队列可以配置仅允许某些源队列将其作为死信队列,如果有其他源队列将其设为死信队列,则从源队列移到死信队列的所有消息都将失败。

一般进入死信队列的消息,需要人为介入排查失败原因。

延迟队列

延迟队列,不是一种队列类型,而是队列上的一个属性。

时间:延迟的有效时间为0 秒~15 分钟

作用:消息到达后,延迟特定时间后才会传递给使用者。

  • 标准队列,更改此设置不会影响队列中已有的消息的延迟。
  • FIFO 队列,更改此设置会影响队列中已有的消息的延迟。

延迟队列 & 可见性超时

  • 延迟队列,消息延迟被使用者消费。
  • 可见性超时,消息被一个使用者接受后,其它使用者最长多久可以看到这条消息