aws sqs基础概念和队列参数解析

2024-05-26 00:28

本文主要是介绍aws sqs基础概念和队列参数解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分布式队列的组成部分

  • 生产者,向队列发送消息的组件
  • 消费者,接受队列消息
  • 队列,多个sqs服务器存储冗余存储消息

sqs自动删除超过最大留存时间的消息(默认4天),可以通过SetQueueAttributes调整为(60 s to 1,209,600 s (14 天) )

消息的生命周期

  • 生产者向sqs发送消息,在多个服务器上冗余存储

  • 消费者请求消费,可见性超时开始计时,消息并未删除但不接受后续消费请求

  • 消费者消费完毕删除消息,避免可见性超时后重复消费

队列类型

标准队列

由于分布式存储,sqs副本服务器可能故障导致消费和删除消息失败,导致重复消费。需要将application设置为幂等的

fifo队列

  • 发送消息时消息本身带有不重复id,sqs按照发送顺序处理
  • 如果多个生产者向同一个消息组id发送,则在消费组中按照先后顺序处理
  • 消息仅在同一个消息组中有序,不同消息组的消息无序
  • 队列中的消息组数量没有上限
  • 无法接收指定消费组的消息
  • 接受具有多个消息组id的队列时,sqs首先尝试返回尽可能多的具有相同消息组 ID 的消息
  • fifo队列允许重试逻辑
  • fifo在标准队列的基础上引入了exactonce,需要配置基于内容的重复数据删除(使用SHA-256 hash生成去重id)或者显示提供去重id
  • 不能将现有的标准队列转换为 FIFO 队列,必须为应用程序创建一个新的 FIFO 队列
  • fifo队列不支持每个消息延迟,只支持每个队列延迟
  • fifo的数据在分片中存储,请求接近或超过分片上限会自动添加新分片,分片的利用率较低可能会减少分片,此操作对用户透明
  • 消息所处的分片取决于消息组id的hash,建议大量使用消息组id区分分片
  • sqs异步缓冲客户端不支持fifo队列
  • 不兼容fifo队列的服务包括,s3事件通知,asg生命周期钩子,iot规则行动,lambda死信队列

队列比较

队列类型标准队列FIFO 队列
吞吐量无限吞吐量,支持每个 API 操作每秒几乎无限次的 API 调用高吞吐量 ,如果使用批处理,则每个 API 方法(发送,接受,删除),FIFO 队列每秒最多支持 3,000 条消息。每秒 3000 条消息指可能 300 个 API 调用,每个调用都包含10 条消息。可以提限
不使用批处理,FIFO 队列的每个 API 方法(发送,接受,删除)每秒最多支持 300 个 API 调用
数据重复at least onceexact once
数据有序尽力排序 ,可能乱序
img
先进先出传送 — 严格保留消息的发送和接收顺序。
img
使用场景当吞吐量很重要时当事件的顺序重要时

队列参数

可见超时

 	            Visibility Timeout

  • 可见性超时设置从队列接收的消息(由一个使用者接收)对其他消息使用者不可见的时间长度
  • 如果消息必须只接收一次,则使用者必须在可见性超时期间删除该消息
  • 默认的可见性超时设置为30秒
  • 为了获得最佳性能,将可见性超时设置为大于 AmazonWebServicesSDK 读超时

消息保留期

  • 保留不会被删除的消息的时间量

  • 默认4天,保留时间从60秒到1,209,600秒(14天)不等

  • 消息的过期时间总是基于其原始的队列时间戳。当消息移动到死信队列时,队列时间戳保持不变。例如,如果一条消息在被移动到死信队列之前在原始队列中停留1天,并且死信队列的保留期被设置为4天,那么该消息将在3天后从死信队列中删除

延迟时间

img

  • 适用于使用者需要额外的时间来处理消息。发送到队列的任何消息在延迟期间对使用者都是不可见的
  • 队列的默认(最小)延迟为0秒,最多15分钟
  • 对于标准队列该设置不可回溯的(不会影响队列中已有消息的延迟)。对于 FIFO 队列是可追溯的

最大消息大小

  • 支持的最小消息大小为1字节,最大大小为262,144字节(256 KB)
  • 要发送大于256kb 的消息,可以使用 sqs 扩展的 Java 客户端库。该消息包含对 AmazonS3中消息有效负载的引用。最大有效载荷大小为2G

接收消息等待时间

  • 接收消息等待时间是轮询等待消息可用以接收的最长时间
  • 最小值为0秒,最大值为20秒
  • 在服务端(设置上限),如果将接收消息等待时间设置为0,则接收请求使用短轮询
  • 在客户端(实际轮询时间),当 ReceiveMessage 请求的 WaitTimeSecond 参数设置为0时,将发生短轮询

Redrive allow

  • 定义哪些源队列可以使用此队列作为死信队列
  • 通过 ARN 指定最多10个源队列的列表
  • 源队列必须由相同的帐户拥有,并且必须与死信队列驻留在相同的区域中

死信队列

  • MaxReceiveCount 是使用者在移动到死信队列之前尝试从队列接收消息而不删除消息的次数

  • DLQ 队列类型(标准或 FIFO)必须与源队列匹配

  • 源队列和死信队列必须由相同的帐户拥有,并且必须与死信队列驻留在相同的区域中

队列权限

授权其他账户访问sqs权限的示例

{"Sid": "__sender_statement","Effect": "Allow","Principal": {"AWS": ["12323112441"]},"Action": ["SQS:SendMessage"],"Resource": "arn:aws-cn:sqs:cn-north-1:xxxxxxxxxxx:"
},
{"Sid": "__receiver_statement","Effect": "Allow","Principal": {"AWS": ["12323112441"]},"Action": ["SQS:ChangeMessageVisibility","SQS:DeleteMessage","SQS:ReceiveMessage"],"Resource": "arn:aws-cn:sqs:cn-north-1:xxxxxxxxxxx:"
}

这篇关于aws sqs基础概念和队列参数解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003041

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图