AWS SQS DOC AND RUBY DEMO

來源:互聯網
上載者:User

標籤:aws   sqs   ruby demo   


# Amazon SQS搜集整理aws sqs 的文檔以及使用Ruby demo

## Amazon Simple Queue Service (SQS) 是一個可伸縮且可靠的訊息傳遞架構,可以使用它簡便地建立、儲存和擷取簡訊。可以使用它構建基於 Amazon Web Services 的應用程式。使用 SQS 是構建鬆散耦合的 Web 應用程式的好方法。只需根據使用量為訊息付費。整個隊列架構在 Amazon 資料中心的安全環境中運行。


## SQS 提供以下特性:* 可靠性
SQS 能夠跨多個資料中心冗餘地儲存訊息,保證它們隨時可用。
* 簡單性
訪問和使用 SQS 的編程模型非常簡單,而且可以通過多種程式設計語言使用 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 把每個訊息儲存在多台伺服器上,從而提供冗餘和高可用性。如果在刪除一個訊息時其中一個伺服器不可用,那麼在以後接收訊息時有可能再次擷取此訊息的拷貝(儘管這種情況很少出現)。
* SQS 不保證在查詢時返回隊列中的所有訊息。
SQS 使用基於加權隨機分布的訊息取樣,在查詢訊息時,它只從取樣的一部分伺服器返回訊息。儘管一次查詢請求可能不會返回隊列中的所有訊息,但是如果一直從隊列中擷取訊息,最終會取樣所有伺服器,您就會得到所有訊息。


## 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: xxxsecret_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.newqueue = sqs.queues.create("my_queue")queue.poll do |msg|  puts msg.bodyend



* 發送訊息


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.newqueue = 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





















相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.