AWS SQSをRubyで試してみる
RubyからAWSのSQSにメッセージを送受信してみます。前回はPythonで試しましたが、今回はそのRuby版です。
CloudFormationでSQSを作成するところは前回と同じなので省略します。
$ gem install -N aws-sdk
Rubyのサンプルコード samplr.rb
。
require 'json' require 'aws-sdk' profile = "default" credentials = Aws::SharedCredentials.new(profile_name: profile) sqs_client = Aws::SQS::Client.new(credentials: credentials) queue_url = "https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxxxx/samplesqs-SampleSQS-XXXXXXXXXXXX" # 送信 idx = 1 while idx <= 10 do # 10個のメッセージを送信 message = {msg: "Hello, world!", foo: idx} sqs_client.send_message({ queue_url: queue_url, message_body: JSON.dump(message), }) idx += 1 end # 受信 loop do res = sqs_client.receive_message({ queue_url: queue_url, }) # 受信したものをなにか処理 (このサンプルでは表示するだけ) delete_entries = [] # 処理済みメッセージ一覧 id = 1 for msg in res.messages do message = JSON.parse(msg.body) p message delete_entries.push({id: id.to_s, receipt_handle: msg.receipt_handle}) id += 1 end # 処理済みメッセージを削除 if delete_entries.size > 0 then # 0件でdelete_message_batchを呼び出すとエラーになる sqs_client.delete_message_batch({ queue_url: queue_url, entries: delete_entries, }) else break end end
実行してみます。
$ ruby sample.rb {"msg"=>"Hello, world!", "foo"=>5} {"msg"=>"Hello, world!", "foo"=>1} {"msg"=>"Hello, world!", "foo"=>9} {"msg"=>"Hello, world!", "foo"=>2} {"msg"=>"Hello, world!", "foo"=>7} {"msg"=>"Hello, world!", "foo"=>10} {"msg"=>"Hello, world!", "foo"=>3} {"msg"=>"Hello, world!", "foo"=>4} {"msg"=>"Hello, world!", "foo"=>6} {"msg"=>"Hello, world!", "foo"=>8}
できました。順序は保証されていないので、受信したメッセージの順番はめちゃめちゃです。