首页
互助圈
新手教程
进阶之路
算法原理
架构设计
JAVA进阶
C/C++进阶
Python进阶
JavaScript
数据库
大数据
消息服务
源码解读
JAVA源码
Spring源码
数据库
消息服务
Dubbo源码
面试指南
大厂专栏
面试技巧
面试经验
面试题库
开发资料
文档资料
工具软件
电子书籍
小牛导航
在线工具
登录
当前位置:
首页
>
工具软件
>
sqs-consumer
>
使用案例
>
AWS SQS, SWF and SNS
盖夕
2023-12-01
SQS (Simple Queue Service)
概念
简单消息服务,类似于Rabbit MQ,主要作用是作为消息中间件,解耦应用程序的各个组件
SQS不保证消息FIFO,但能保证消息的高可靠
消息的生命周期
生产者将消息发送到消息队列,此时消息的状态变为in-flight
消费者从消息队列中获取消息,此时消息的状态变为processed,在visibility timeout的时间段以内,其它消费者无法获取到相同的消息
消费者处理完毕消息后,从SQS中消息删除
Visibility Timeout
某个消费者从消息队列中取出一个消息后,visiblity timeout开始计时,此时该消息不能被其它消费者获取。如果超时了该消息还没有被开始的消费者删除,则该消息的状态又变为in-flight,其它消费者可以获取该消息继续处理。
该机制很好理解,试想,如果某个消费者获取了某个消息,但可能某种原因处理失败了却又一直不删除此消息,该消息就会一直处于processed状态,消息即不能被删除,又不能被其它消费者处理,这就是一个问题,所以引入了timeout机制。
超时时间范围30s-12h,默认30s
Delay Queue
如果设置了delay queue,所有消息都会被延时处理,直到delay的时间到了。
delay的时间范围0-15m
In-flight
消息被发送到queue后其状态为in-flight,默认可以有
120000
个in-flight消息
Queue的操作,Unique IDs
CreateQueue,ListQueues,DeleteQueue,SendMessage, SendMessageBatch,ReceiveMessage,DeleteMessage,DeleteMessageBatch,ChangeMessageVisibility,etc
发送消息到queue后,SQS会返回一个消息的唯一ID,该ID只是用于标识该消息,不能操作消息
从queue获取到消息后SQS会返回receipt handle,可以用此句柄操作消息,如删除消息等
Queue and message identifiers
Queue:queue URL,每个Queue都有个URL用于唯一标识该Queue
Message ID:唯一标识消息,但不能操作消息
Receipt handles:消息句柄,也能唯一标识消息,用于操作消息
Message Attributes
消息属性,用于对消息的额外描述,如时间戳,签名等,可选项,不是必须设置的
Long Polling
默认情况用于获取消息的逻辑是在一个循环里不停的调用ReceiveMessage,如果有消息则交专门的线程处理,如果没有则返回空。ReceiveMessage不是阻塞式的,也就是说如果没有消息其就会马上返回。这样可能有一个问题,如果一直没有消息则会陷入死循环,会增加CPU的开销。可以通过每次循环后sleep一段时间来解决,但如果有很多消息则会降低系统性能,因为每次都要sleep。
Long Polling是指为SQS设置一个时间,在该时间段里调用ReceiveMessage后如果没有消息则调用会被阻塞。如果被阻塞后在该时间段内有新的消息,则立即返回消息,如果超时后还没消息则返回空。
Long Polling时间范围1-20s
Dead Letter Queue
将处理失败的消息放入dead letter queue,以便trouble shooting
Access Control
通过创建IAM policy可以设置Queue的访问权限,例如只允许某个账号在某个时间段访问Queue等
Queue就是AWS的一个资源,通过IAM policy可以准确指定访问权限
Durability
如果向SQS发送消息,SQS只有确定存储完成后才会返回成功,这能保证消息的持久性,且操作简单
不像其它的异步处理系统,发送消息后会立刻返回,而不管消息是否处理成功
如果要建立SQS的异步调用,可以在SendMessage调用的上层进行处理,例如专门的线程来发送消息而不管发送结果
消息可以在Queue中存放4-14天
SWF (Simple Workflow Service)
概念
简单工作流服务,用于协调某个工作流的各个处理子流程,在各个处理流程上应用不同的处理分支来完成任务
SWF支持串行处理,并行处理,同步处理和异步处理等类型
Domains
SWF域,是一组资源的集合和分组
一个domain可以包含多个workfkow,且workflow之间可以有交互,但一个workflow只能属于某一个domain
History
通过查看workflow history可以知道详细的处理流程细节,完成时间,错误记录等
Actors
Workflow Starter:用于初始化和启动某个workflow
Workflow Decider:用于决定下一个工作流是什么
Activity Workers:用于执行具体的任务
Tasks
Activity tasks:执行具体的任务
Lambda tasks:通过Lambda执行具体的任务
Decision tasks:执行任务来决定下一个工作流是什么
Task List
任务列表,可以理解为task的队列,是所有任务的集合
Long Polling
Decider和Activity worker与SWF相互通信的途径
与SQS的long polling有点类似,都是周期性的检查他们和SWF的状态,如果有需要处理的任务,则进行相应的处理
Object Identifier
Workflow Type:Domain name,version
Activity Type:Domain name,version
Decision and activity task:Unique task token
Execution of workflow:Domain,workflow ID,run ID
Execution Closure
如何结束任务:完成,取消,错误,超时
简单的workflow执行流程
Starter通知SWF开始某个工作流
SWF通知Decider下一步如何处理
Decider返回SWF下一个处理的任务
SWF通知Activity worker处理任务
Activity worker处理完毕后返回SWF
SWF通知Decider下一步如何处理
......
Decider通知SWF任务处理完毕
SWF关闭workflow执行流程,归档历史记录等
SNS (Simple Notification Service)
概念:简单通知服务,用于通知终端用户某个事件的发生,运行方式类似生产者消费者模式。
通知方式
Email,发邮件
SQS,向队列发消息
HTTP/s,可能是通过提交http请求或者调用RESTful发送消息
SMS,发短信
AWS Lambda,执行Lambda程序
Topic
一个topic就是一个SNS的接入点,任何想发送通知的生产者都是将通知发送到某个topic
Subscription
订阅某个topic,就是将某种通知方式关联到某个topic,只要topic接受到生产者发送的通知,SNS就会将通知转发给所有订阅者
一个topic可以对应多个subscription,一个subscription只对应一个topic
SNS的使用场景
Fanout:通知的扇出,是指某个topic接受到某个生产者发送的消息后,SNS会将其消息转发给所有订阅者,通知被扩散了
Applicaiton and system alert,应用和系统的告警,如EC2 instance异常关闭,EC2 的CPU使用率过高,系统出现异常导致无法启动服务等都可以通过SNS告知用户
Push Email and Text Message:向用户群发邮件或短信,例如广告信息,通知信息等
Mobilie Push Notificatoin:向应用推送更新通知,并可以包含下载链接等
类似资料:
相关阅读
相关文章
相关问答
快捷导航:
新手教程
算法原理
架构设计
Java进阶
数据库进阶
大厂专栏
面试经验
编程笔记
编程问答
所有专题
文档资料
工具软件
电子书籍
小牛导航
在线工具:
房贷计算器
个税计算器
Linux命令查询
Json格式化
正则表达式
颜色转换
AES加解密
SHA1加密
MD5加密
毒鸡汤
字数统计
随机密码生成
进制转换
Base64编解码
励志句子
Copyright © 2019-2024 小牛知识库@xnip.cn. All Rights Reserved.