# 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的更多相关文章

  1. how to design AWS SQS?

    遇到这么一题system design,怎么做? 几个月以前,有同事提出要用Webapi代替现有的WCF,当时我投的反对票.而且我给了很充分的理由,不仅仅是时间不足,人手不够,更重要的是这个变化太大, ...

  2. AWS Lambda 借助 Serverless Framework,迅速起飞

    前言 微服务架构有别于传统的单体式应用方案,我们可将单体应用拆分成多个核心功能.每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作时不会互相影响 这种设计理念被进一步应用,就变成了无 ...

  3. Ruby安装

    Windows下安装ruby 先安装ruby吧 点击安装,额,咳咳什么情况,好了 人是有国籍的,但知识无国界的 是这个意思吧,选择安装语言   选择安装目录 顺便勾选上添加到环境变量吧   安装完成 ...

  4. ruby导出exl方式

    class Demo print "hello world" require "spreadsheet" #设置表格的编码为utf-8 Spreadsheet. ...

  5. Ruby在Windows上安装

    Ruby在Windows下安装windows下的rails2.02环境搭建 ROR本地安装的技术含量比较高的 一.安装Ruby1.下载Ruby()安装包双击安装,安装过程中注意选中"Enab ...

  6. AWS AutoScaling的一个ScaleDown策略问题以及解决方法

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. AWS AutoScaling简介 AutoScaling是AWS的一个重要服务,用来弹性的自动创建(S ...

  7. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  8. Boto3访问AWS资源操作总结(1)

    最近在工作中需要对AWS上的部分资源进行查询和交叉分析,虽然场景都比较简单,但是这种半机械的工作当然还是交给Python来搞比较合适.AWS为Python提供的SDK库叫做boto3,所以我们建立一个 ...

  9. Solr vs. Elasticsearch谁是开源搜索引擎王者

    当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...

随机推荐

  1. ***PHP各种编码的汉字字符串截取

    虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数.汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需 ...

  2. ***Java多线程发展简史

    http://blog.jobbole.com/28297/ 本文来自四火的博客(@RayChase),由@_Zhijun 推荐 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的 ...

  3. HDU 1176 免费馅饼(DP)

    点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...

  4. DHTMLX 前端框架 建立你的一个应用程序 教程(七)-- 添加筛选功能

    表格的过滤筛选 我们在每列第一行添加一个文本,用做数据的条件筛选. 我们还提供服务端的筛选 ,当有大量数据时 , 我们可以使用dhtmlxConnector 进行后台数据的筛选. 添加过滤器到表格列中 ...

  5. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-006-给bean运行时注入值(Environment,Property文件)

    一. 直观的给bean注入值如下: @Bean public CompactDisc sgtPeppers() { return new BlankDisc( "Sgt. Pepper's ...

  6. 《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

    原文:<ArcGIS Engine+C#实例开发教程>第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步 ...

  7. poj3373Changing Digits(dp)

    链接 dfs倒着搜 返回的路径不能满足相同的数最多 借鉴了下别人的代码.. 先dp出来 再倒着标记一下 然后正回来一定可以满足了 dp保存的是最小的不相同数 #include <iostream ...

  8. NOI2010超级钢琴 2

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1296  Solved: 606[Submit][Status ...

  9. Azure Backup 入门

    Viswanath Tata 云 + Enterprise项目经理 Azure Backup是一款允许客户将数据备份到 Azure的强大工具.请参阅这篇文章,快速了解 Azure Backup.我 ...

  10. javascript 中concat与push的区别

    1. push 遇到数组参数时,把整个数组参数作为一个元素:而 concat 则是拆开数组参数,一个元素一个元素地加进去. 2. push 直接改变当前数组:concat 不改变当前数组. 总结:如果 ...