AWS SQS DOC AND RUBY DEMO
# Amazon SQS
搜集整理aws sqs 的文档以及使用Ruby demo
## Amazon Simple Queue Service (SQS)
是一个可伸缩且可靠的消息传递框架,能够使用它简便地创建、存储和获取文本消息。能够使用它构建基于 Amazon Web Services 的应用程序。使用 SQS 是构建松散耦合的 Web 应用程序的好方法。仅仅需依据使用量为消息付费。
整个队列框架在 Amazon 数据中心的安全环境中执行。
## SQS 提供下面特性:
* 可靠性
SQS 可以跨多个数据中心冗余地存储消息,保证它们随时可用。
* 简单性
訪问和使用 SQS 的编程模型很easy,并且能够通过多种编程语言使用 SQS。
* 安全性
SQS 提供非常高的安全水平。仅仅同意授权的用户訪问消息。
* 可伸缩性
能够用 SQS 创建基于队列的应用程序。这些程序能够读写数量不限的消息。
* 低成本
SQS 以很低廉的费率满足您的消息传递需求。
## 消息
消息 包括不超过 8 KB 的文本数据。每一个消息一直存储到被应用程序接收为止。当接收消息的应用程序从队列中读取一个消息时,指定可见性超时值(以秒为单位)。它的作用就像是锁:
* 确保在指定的时间段内队列的其它消费者看不到已被接收的消息。
* 仅仅有当超时周期过期时,并且读取消息的应用程序没有删除它,消息才会又一次出如今队列中。
* 消息在队列中保留四天。
* SQS 会自己主动删除在队列中超过四天的消息。
SQS 採用 “终于一致性(eventual consistency)” 模型。这意味着您可以向队列发送消息,可是队列的消费者不一定可以在特定的时间段内看到它。消息终于会投递,可是一定要考虑您的应用程序是否在意消息的次序。
* 表 1. 消息的组成部分
部分 说明
MessageId 引用此消息的惟一 ID。
ReceiptHandle 在从队列获取消息时返回的惟一句柄。每次从队列获取消息时返回的句柄都不一样。在删除消息时须要使用它。
MD5OfBody 非 URL 编码的消息体字符串的 MD5 摘要。
Body 实际的消息数据。
* 队列
队列 是消息的容器。每一个消息必须指定将容纳它的队列。发送给队列的消息保留在队列中。直到显式地删除它们。队列採用 “先进先出” 次序,可是并不保证次序。每一个队列的默认可见性超时值是 30 秒。能够为整个队列改动这个值,也能够在获取消息时单独为每一个消息设置。
队列或消息可见性超时值的最大值是两小时(7,200 秒)。假设队列中连续 30 天没有活动,SQS 保留自己主动删除它们的权力。
## 设计考虑因素
SQS 与常见的队列框架有点儿不一样。在设计基于 SQS 的应用程序之前,您必须考虑三个问题:
* SQS 不保证队列中消息的次序。
消息在队列中的次序是宽松的;它们实际上并不依照在队列中加入消息的次序存储。SQS 会尝试保持消息的次序,可是不保证接收消息的次序与发送它们的次序全然同样。假设消息的次序对于您的应用程序非常重要,就须要在每一个消息中加入序列数据。
* SQS 不保证删除队列中的消息。
在设计应用程序时,必须保证多次处理同一消息不会对程序产生影响。SQS 把每一个消息存储在多台server上。从而提供冗余和高可用性。假设在删除一个消息时当中一个server不可用,那么在以后接收消息时有可能再次获取此消息的拷贝(虽然这样的情况非常少出现)。
* SQS 不保证在查询时返回队列中的全部消息。
SQS 使用基于加权随机分布的消息取样,在查询消息时。它仅仅从取样的一部分server返回消息。虽然一次查询请求可能不会返回队列中的全部消息,可是假设一直从队列中获取消息,终于会取样全部server。您就会得到全部消息。
## API 版本号
尽快開始迁移使用老 API 版本号的应用程序。
为了尽可能降低麻烦。在用 SQS 创建新应用程序时,应该使用 API 的最新版本号。
## Amazon Web Services 和 SQS 入门
要想開始使用 SQS,首先须要注冊一个 Amazon Web Services 账户(见 參考资料)。
本系列的 第 2 部分 具体介绍了怎样注冊 Amazon Web Services 账户。
创建账户之后,必须为账户启用 Amazon SQS 服务:
* 注冊 Amazon Web Services 账户。
* 导航到 SQS 主页。
* 单击页面右边的 Sign Up For Amazon SQS。
* 提供必需的信息并完毕注冊过程。
## 与 SQS 交互 AWS SQS RUBY Example
(http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SQS.html#queues-instance_method)
* Ruby AWS-SDK GEM
https://github.com/aws/aws-sdk-ruby
* 设置一些环境变量,引用 Amazon Web Services 訪问键。
能够从 Web Services Account information 页面获得訪问键。(http://aws-portal.amazon.com/gp/aws/developer/account/index.html?
ie=UTF8&action=account-links)
config.yml
access_key_id: xxx
secret_access_key: yyy
* 获取消息
sqs_poll.rb
#!/usr/bin/env ruby require 'yaml'
require 'aws-sdk' config_file = File.join(File.dirname(__FILE__),"config.yml")
config = YAML.load(File.read(config_file))
AWS.config(config) sqs = AWS::SQS.new
queue = sqs.queues.create("my_queue")
queue.poll do |msg|
puts msg.body
end
* 发送消息
sqs_send.rb
#!/usr/bin/env ruby require 'yaml'
require 'aws-sdk' config_file = File.join(File.dirname(__FILE__),"config.yml")
config = YAML.load(File.read(config_file))
AWS.config(config) # http://rubydoc.info/github/amazonwebservices/aws-sdk-for-ruby/master/AWS/SQS sqs = AWS::SQS.new
queue = sqs.queues.create("my_queue") # http://rubydoc.info/github/amazonwebservices/aws-sdk-for-ruby/master/AWS/SQS/Queue send = lambda { |name, queue|
while true do
queue.send_message("#{name}:#{Time.now.to_s}")
sleep 1
end
} Thread.new { send.call("t1", queue) }
Thread.new { send.call("t2", queue) }
Thread.new { send.call("t3", queue) } sleep 1000
AWS SQS DOC AND RUBY DEMO的更多相关文章
- how to design AWS SQS?
遇到这么一题system design,怎么做? 几个月以前,有同事提出要用Webapi代替现有的WCF,当时我投的反对票.而且我给了很充分的理由,不仅仅是时间不足,人手不够,更重要的是这个变化太大, ...
- AWS Lambda 借助 Serverless Framework,迅速起飞
前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...
- Ruby安装
Windows下安装ruby 先安装ruby吧 点击安装,额,咳咳什么情况,好了 人是有国籍的,但知识无国界的 是这个意思吧,选择安装语言 选择安装目录 顺便勾选上添加到环境变量吧 安装完成 ...
- ruby导出exl方式
class Demo print "hello world" require "spreadsheet" #设置表格的编码为utf-8 Spreadsheet. ...
- Ruby在Windows上安装
Ruby在Windows下安装windows下的rails2.02环境搭建 ROR本地安装的技术含量比较高的 一.安装Ruby1.下载Ruby()安装包双击安装,安装过程中注意选中"Enab ...
- AWS AutoScaling的一个ScaleDown策略问题以及解决方法
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. AWS AutoScaling简介 AutoScaling是AWS的一个重要服务,用来弹性的自动创建(S ...
- aws基础架构学习笔记
文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...
- Boto3访问AWS资源操作总结(1)
最近在工作中需要对AWS上的部分资源进行查询和交叉分析,虽然场景都比较简单,但是这种半机械的工作当然还是交给Python来搞比较合适.AWS为Python提供的SDK库叫做boto3,所以我们建立一个 ...
- Solr vs. Elasticsearch谁是开源搜索引擎王者
当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...
随机推荐
- 1182-IP地址转换
描述 给定一个点分十进制的IP地址,把这个IP地址转换为二进制形式. 输入 输入只有一行,一个点分十进制的IP地址 包括四个正整数,用三个.分开,形式为a.b.c.d 其中0<=a,b,c,d& ...
- ****Objective-C 中的方法的调用
oc语言中采用特定的语言调用类或者实例(对象)的方法称为发送消息或者方法调用. oc中方法的调用有两种: 第一种: [类名或对象名 方法名]; [ClassOrInstance method]; [C ...
- MongoDB实战指南(三):MongoDB的锁机制
与关系数据库一样,MongoDB也是通过锁机制来保证数据的完整性和一致性,MongoDB利用读写锁来支持并发操作,读锁可以共享写锁具有排他性.当一个读锁存在时,其他读操作也可以用这个读锁:但当一个写锁 ...
- 解决win8.1右键菜单出现在左边
这个问题估计很少有人遇到,当在桌面上单击鼠标右键时,如果正常情况下,应该是在鼠标光标的右侧弹出来,除非右边的空间不够了,才在左侧弹出.但遇到故障,就是不论在桌面的哪里点右键,菜单都在左侧弹出,虽然不影 ...
- ActionBar官方教程(7)自定义操作项的view,如何得到它及处理它的事件
Adding an Action View An action view is a widget that appears in the action bar as a substitute for ...
- [hadoop源代码解读] 【SequenceFile】
SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.一般对小文件可以使用这种文件合并,即将文件名作为key, ...
- jquery easyui treegrid使用小结
在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 系统设置(Ⅰ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 总体介绍>,主要介绍系统总体的界面效果和用户体验UI设计. 在MVC.MVP大行其道的今天,写WebForm该系列篇章, ...
- [Buffalo] 一些SQL函数
取得当前时间的函数:GETDATE() 计算时间的函数:DATEADD(datepart,number,date) 计算两个时间差额:DATEDIFF(datepart,startdate,endda ...
- VMware ESXi CentOS Linux虚拟机安装VMware Tools教
转自VMware ESXi CentOS Linux虚拟机安装VMware Tools教程 | 一米居 http://www.yimiju.com/articles/548.html 最近一周在学习和 ...