zoukankan      html  css  js  c++  java
  • 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
    





















  • 相关阅读:
    MVC各部分技术体现
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    my SQL Workbench创建数据库
    哪些素质很重要,却是读书学不来
    给程序员最好的18个忠告!
    互联网协议入门(二)
    互联网协议入门(一)
    div+css命名规范大全
    javascript中this的用法
    XHTML 相对路径与绝对路径
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5330510.html
Copyright © 2011-2022 走看看