# 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框架CodeIgniter学习】使用辅助函数—建立自己的JSONHelper

    本文使用的是2.1.4版本,看的时候请注意. 官方文档:http://codeigniter.org.cn/user_guide/general/helpers.html(关于辅助函数Helper的使 ...

  2. HDU1395+快速幂

    #include<stdio.h> int fast_pow( int a,int b,int mod ){ ; ){ == ){ res = res*a%mod; } a = a*a%m ...

  3. linux zip 命令详解

    功能说明:压缩文件. 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时 ...

  4. html5 鼠标跟随运动

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  5. access to modified closure 闭包的问题

    ; i < listBoxDevices.Items.Count; i++) { var tempDeviceId = listBoxDevices.Items[i].ToString(); i ...

  6. URAL1012. K-based Numbers. Version 2

    链接 考查大数 正好拿来学习下JAVA JAVA好高端.. import java.io.*; import java.math.*; import java.text.*; import java. ...

  7. bzoj1176 2683

    我的第一道cdq分治题清明做了一下cdq分治的几道题,感觉这个东西实在是太厉害了离线大法好!关于几个经典的非数据结构做法具体可以看xhr神犇2013年的论文应用cdq分治的前提条件是不强制在线,修改操 ...

  8. Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞

    漏洞名称: Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞 CNNVD编号: CNNVD-201311-054 发布时间: 2013-11-06 更新时间: 2013- ...

  9. wildfly-9.0.2 web项目部署详细步骤

    一.配置操作系统环境变量 JAVA_HOME = C:\Program Files (x86)\Java\jdk1.7.0_67 JBOSS_HOME = F:\server\wildfly-9.0. ...

  10. SQL_Server2005自动备份与删除—维护计划

    业务背景: 为了方便客户及时自动更新SAP库里面的数据与减少磁盘的空间.所以要在SQL对数据进行自动备份与删除备份.这样可以更加方便管理员的管理,和减少管理员的工作量. 解决思路: 在2005 SQL ...