SQS (Simple Queue Service)

  1. 概念

    1. 简单消息服务,类似于Rabbit MQ,主要作用是作为消息中间件,解耦应用程序的各个组件
    2. SQS不保证消息FIFO,但能保证消息的高可靠
  2. 消息的生命周期
    1. 生产者将消息发送到消息队列,此时消息的状态变为in-flight
    2. 消费者从消息队列中获取消息,此时消息的状态变为processed,在visibility timeout的时间段以内,其它消费者无法获取到相同的消息
    3. 消费者处理完毕消息后,从SQS中消息删除
  3. Visibility Timeout
    1. 某个消费者从消息队列中取出一个消息后,visiblity timeout开始计时,此时该消息不能被其它消费者获取。如果超时了该消息还没有被开始的消费者删除,则该消息的状态又变为in-flight,其它消费者可以获取该消息继续处理。
    2. 该机制很好理解,试想,如果某个消费者获取了某个消息,但可能某种原因处理失败了却又一直不删除此消息,该消息就会一直处于processed状态,消息即不能被删除,又不能被其它消费者处理,这就是一个问题,所以引入了timeout机制。
    3. 超时时间范围30s-12h,默认30s
  4. Delay Queue
    1. 如果设置了delay queue,所有消息都会被延时处理,直到delay的时间到了。
    2. delay的时间范围0-15m
  5. In-flight
    1. 消息被发送到queue后其状态为in-flight,默认可以有120000个in-flight消息
  6. Queue的操作,Unique IDs
    1. CreateQueue,ListQueues,DeleteQueue,SendMessage, SendMessageBatch,ReceiveMessage,DeleteMessage,DeleteMessageBatch,ChangeMessageVisibility,etc
    2. 发送消息到queue后,SQS会返回一个消息的唯一ID,该ID只是用于标识该消息,不能操作消息
    3. 从queue获取到消息后SQS会返回receipt handle,可以用此句柄操作消息,如删除消息等
  7. Queue and message identifiers
    1. Queue:queue URL,每个Queue都有个URL用于唯一标识该Queue
    2. Message ID:唯一标识消息,但不能操作消息
    3. Receipt handles:消息句柄,也能唯一标识消息,用于操作消息
  8. Message Attributes
    1. 消息属性,用于对消息的额外描述,如时间戳,签名等,可选项,不是必须设置的
  9. Long Polling
    1. 默认情况用于获取消息的逻辑是在一个循环里不停的调用ReceiveMessage,如果有消息则交专门的线程处理,如果没有则返回空。ReceiveMessage不是阻塞式的,也就是说如果没有消息其就会马上返回。这样可能有一个问题,如果一直没有消息则会陷入死循环,会增加CPU的开销。可以通过每次循环后sleep一段时间来解决,但如果有很多消息则会降低系统性能,因为每次都要sleep。
    2. Long Polling是指为SQS设置一个时间,在该时间段里调用ReceiveMessage后如果没有消息则调用会被阻塞。如果被阻塞后在该时间段内有新的消息,则立即返回消息,如果超时后还没消息则返回空。
    3. Long Polling时间范围1-20s
  10. Dead Letter Queue
    1. 将处理失败的消息放入dead letter queue,以便trouble shooting
  11. Access Control
    1. 通过创建IAM policy可以设置Queue的访问权限,例如只允许某个账号在某个时间段访问Queue等
    2. Queue就是AWS的一个资源,通过IAM policy可以准确指定访问权限
  12. Durability
    1. 如果向SQS发送消息,SQS只有确定存储完成后才会返回成功,这能保证消息的持久性,且操作简单
    2. 不像其它的异步处理系统,发送消息后会立刻返回,而不管消息是否处理成功
    3. 如果要建立SQS的异步调用,可以在SendMessage调用的上层进行处理,例如专门的线程来发送消息而不管发送结果
    4. 消息可以在Queue中存放4-14天

SWF (Simple Workflow Service)

  1. 概念

    1. 简单工作流服务,用于协调某个工作流的各个处理子流程,在各个处理流程上应用不同的处理分支来完成任务
    2. SWF支持串行处理,并行处理,同步处理和异步处理等类型
  2. Domains
    1. SWF域,是一组资源的集合和分组
    2. 一个domain可以包含多个workfkow,且workflow之间可以有交互,但一个workflow只能属于某一个domain
  3. History
    1. 通过查看workflow history可以知道详细的处理流程细节,完成时间,错误记录等
  4. Actors
    1. Workflow Starter:用于初始化和启动某个workflow
    2. Workflow Decider:用于决定下一个工作流是什么
    3. Activity Workers:用于执行具体的任务
  5. Tasks
    1. Activity tasks:执行具体的任务
    2. Lambda tasks:通过Lambda执行具体的任务
    3. Decision tasks:执行任务来决定下一个工作流是什么
  6. Task List
    1. 任务列表,可以理解为task的队列,是所有任务的集合
  7. Long Polling
    1. Decider和Activity worker与SWF相互通信的途径
    2. 与SQS的long polling有点类似,都是周期性的检查他们和SWF的状态,如果有需要处理的任务,则进行相应的处理
  8. Object Identifier
    1. Workflow Type:Domain name,version
    2. Activity Type:Domain name,version
    3. Decision and activity task:Unique task token
    4. Execution of workflow:Domain,workflow ID,run ID
  9. Execution Closure
    1. 如何结束任务:完成,取消,错误,超时
  10. 简单的workflow执行流程
    1. Starter通知SWF开始某个工作流
    2. SWF通知Decider下一步如何处理
    3. Decider返回SWF下一个处理的任务
    4. SWF通知Activity worker处理任务
    5. Activity worker处理完毕后返回SWF
    6. SWF通知Decider下一步如何处理
    7. ......
    8. Decider通知SWF任务处理完毕
    9. SWF关闭workflow执行流程,归档历史记录等

SNS (Simple Notification Service)

  1. 概念:简单通知服务,用于通知终端用户某个事件的发生,运行方式类似生产者消费者模式。
  2. 通知方式
    1. Email,发邮件
    2. SQS,向队列发消息
    3. HTTP/s,可能是通过提交http请求或者调用RESTful发送消息
    4. SMS,发短信
    5. AWS Lambda,执行Lambda程序
  3. Topic
    1. 一个topic就是一个SNS的接入点,任何想发送通知的生产者都是将通知发送到某个topic
  4. Subscription
    1. 订阅某个topic,就是将某种通知方式关联到某个topic,只要topic接受到生产者发送的通知,SNS就会将通知转发给所有订阅者
    2. 一个topic可以对应多个subscription,一个subscription只对应一个topic
  5. SNS的使用场景
    1. Fanout:通知的扇出,是指某个topic接受到某个生产者发送的消息后,SNS会将其消息转发给所有订阅者,通知被扩散了
    2. Applicaiton and system alert,应用和系统的告警,如EC2 instance异常关闭,EC2 的CPU使用率过高,系统出现异常导致无法启动服务等都可以通过SNS告知用户
    3. Push Email and Text Message:向用户群发邮件或短信,例如广告信息,通知信息等
    4. Mobilie Push Notificatoin:向应用推送更新通知,并可以包含下载链接等

AWS SQS, SWF and SNS相关推荐

  1. aws sqs_JMS和AWS SQS的更多高级内容

    aws sqs 如您所知, AWS中的SQS SQS代表"简单队列服务". 最近,在使用它的同时,我发现了将其称为"简单"的原因之一. 在之前的两篇文章( 此处 ...

  2. JMS和AWS SQS的更多高级内容

    如您所知, AWS中的SQS SQS代表"简单队列服务". 最近,在使用它的同时,我发现了将其称为"简单"的原因之一. 在之前的两篇文章( 此处和此处 )中,我 ...

  3. aws sqs php,AWS SQS实用代码PHP

    我有一个 question here 但我仍然错过了解如何使用SQS的观点,请有人帮忙解决一些代码问题. 问题:SQS里面会有什么内容?我已经通过亚马逊教程阅读了这个概念看起来很可爱,但是我错过了实际 ...

  4. aws SQS 控制台配置队列

    配置死信队列(控制台). 死信队列是一个队列,一个或多个源队列可以用来处理没有被成功消费的消息.欲了解更多信息,请参阅Amazon SQS死信队列. Amazon SQS不会自动创建死信队列.你必须先 ...

  5. aws lambda_通过Spring将AWS SQS用作JMS提供程序

    aws lambda 最近AWS公布了新的客户端库,它实现了JMS 1.1规范,并使用他们的简单队列服务(SQS)作为JMS提供者(见杰夫·巴尔的帖子 在这里). 在我的文章中,我将向您展示如何设置M ...

  6. aws sqs_在Spring中将AWS SQS用作JMS提供程序

    aws sqs 最近AWS公布了新的客户端库,它实现了JMS 1.1规范 ,并使用他们的简单队列服务 (SQS)作为JMS提供者 (见杰夫·巴尔的帖子在这里 ). 在我的文章中,我将向您展示如何设置M ...

  7. aws sqs_在Spring使用AWS SQS创建消息驱动Bean

    aws sqs 在我之前的文章中,我展示了一个简单的示例,该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列并从队列中读取消息. 在本文中,我将更进一步,并使用Spr ...

  8. 通过Spring将AWS SQS用作JMS提供程序

    最近AWS公布了新的客户端库,它实现了JMS 1.1规范 ,并使用他们的简单队列服务 (SQS)作为JMS提供者 (见杰夫·巴尔的帖子在这里 ). 在我的文章中,我将向您展示如何设置Maven项目以使 ...

  9. 在Spring使用AWS SQS创建消息驱动Bean

    在我之前的文章中,我展示了一个简单的示例,该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息. 在本文中,我将更进一步,并使用Spring创建一个 ...

  10. aws SQS 配置队列

    了解亚马逊SQS控制台 当你打开控制台时,从导航窗格中选择队列,显示队列页面.队列页面提供了关于活动区域内所有队列的信息. 每个队列的条目显示队列类型和关于队列的其他信息.类型栏可以帮助你把标准队列和 ...

最新文章

  1. pyqt tableview mysql_当数据库中添加了一个新条目时,如何在PyQt中更新TableView?
  2. 神策数据入选 Facebook 全球合作计划,助力出海客户拥抱全球化广告生态
  3. for循环一定要指定键么 vue_第 2 篇:上手 Vue 展示 todo 列表
  4. 从char到QChar
  5. python基础之练习题(二)
  6. thinkphp 接收小程序json数组
  7. Linux的操作系统下载及安装
  8. socket网络编程(tcp udp)
  9. 微信支付全流程对接文档
  10. Kattis - hoppers Hoppers(判奇环)
  11. 公务员计算机职称有哪些,2017职称考试有哪些
  12. 使用ActiveMQ中间件方式发送邮件
  13. python与excel教程_Python对Excel操作教程
  14. python dataframe新增一列
  15. Google play billing: Error refreshing inventory (querying prices of items). (response: 6:Error)
  16. qq邮箱隐藏代码html,QQ邮箱原来这么好用,4个隐藏设置格调满满
  17. 简单的图标移入效果(css缩放)
  18. HEVC代码学习15:AMVP相关函数
  19. 机械臂末端执行器汇总
  20. 如何使得一个div在页面居中显示

热门文章

  1. win10任务栏怎么还原到下面_如何让你的Win10桌面变得更好看?
  2. 硬件开发过程简介(一)
  3. jks转换 p12、keystore、pk8、x509.pem 命令
  4. Windows内核编程学习1:构建HelloWorld
  5. 数据挖掘期末论文要求
  6. 【算法/C语言】01背包问题(动态规划DP)
  7. DDOS攻击原理介绍,可怕的DDos攻击
  8. Android网络小说阅读器的实现
  9. H-JTAG烧写程序的方法
  10. wordpress古腾堡淘宝客插件,支持京东淘宝