跳到主要内容

SQS

什么是SQS

**Amazon Simple Queue Service (SQS)**是一种完全托管的消息队列服务,可以让你分离和扩展微服务、分布式系统和无服务应用程序。

Amazon SQS相当于提供了一个分布式、高可用、高性能的消息队列服务

队列

SQS有两种不同类型的队列,它们分别是:

  • 标准队列(Standard Queue)
  • FIFO队列(先进先出队列)

标准队列

标准队列拥有无限的吞吐量,所有消息都会至少传递一次,并且它会尽最大努力进行排序。

标准队列是默认的队列类型。

FIFO队列

FIFO (First-in-first-out)队列在不使用批处理的情况下,最多支持300TPS(每秒300个发送、接受或删除操作)。

在队列中的消息都只会不多不少地被处理一次

FIFO队列严格保持消息的发送和接收顺序

特点

  • SQS是靠应用程序去拉取的,而不能主动推送给应用程序,推送服务我们使用SNS(Simple Notification Service)

  • 消息会以256 KB的大小存放

  • 消息会在队列中保存1分钟~14天,默认时间是4天

  • 可见性超时(Visibility Timeout)

    • 即当SQS队列收到新的消息并且被拉取走进行处理时,会触发Visibility Timeout的时间。这个消息不会被删除,而是会被设置为

      不可见,用来防止该消息在处理的过程中再一次被拉取

    • 当这个消息被处理完成后,这个消息会在SQS中被删除,表示这个任务已经处理完毕

    • 如果这个消息在Visibility Timeout时间结束之后还没有被处理完,则这个消息会设置为可见状态,等待另一个程序来进行处理

      因此同一个消息可能会被处理两次(或以上)

    • 这个超时时间最大可以设置为12小时

  • 标准SQS队列保证了每一个在队列内的消息都至少会被处理一次

  • 长轮询(Long Polling)

    • 默认情况下,Amazon SQS使用短轮询(Short Polling),即应用程序每次去查询SQS队列,SQS都会做回应(哪怕队列一直是空的)
    • 使用了长轮询,应用程序每次去查询SQS队列,SQS队列不会马上做回应。而是等到队列里有消息可处理时,或者等到设定的超时时间再做出回应。
    • 长轮询可以一定程度减少SQS的花销