Symfoware

Symfowareについての考察blog

Amazon SQS互換メッセージキュー「ElasticMQ」にPython(boto)からキューの登録

Amazon SQS互換のメッセージキュー
https://github.com/adamw/elasticmq

これを使えば、ローカルでSQSのプログラムがかけますね。
Debian 7にインストールしてみます。


Java



Java製(Scala + Akka)なツールなので、JavaVMのインストールを行います。
今回はOracle Java 8をインストールしました。

Debian 7(wheezy)にJava 8(OracleVM)をインストールする


# java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)






ElasticMQの起動



jarファイルをダウンロードして実行するだけです。


# mkdir -p /opt/elasticmq
# cd /opt/elasticmq
# wget https://s3-eu-west-1.amazonaws.com/softwaremill-public/elasticmq-server-0.8.7.jar

# java -jar elasticmq-server-0.8.7.jar



ポート9324で待ち受けます。





botoからキューを登録



こちらを参考にしました。
ElasticMQでAmazon SQSのローカルテスト環境を作る

aws_access_key_idとaws_secret_access_keyは適当でOKです。


  1. # -*- coding:utf-8 -*-
  2. from boto.sqs import regioninfo
  3. from boto.sqs.message import Message
  4. AWS_ACCESS_KEY='dummy_access_key'
  5. AWS_SECRET_KEY='dummy_secret_key'
  6. queue_name = 'test_queue'
  7. name = "elasticmq"
  8. endpoint = "192.168.1.104"
  9. # エンドポイントをサーバーIPとした仮想のリージョンを作成
  10. fake_region = regioninfo.SQSRegionInfo(name=name, endpoint=endpoint)
  11. # コネクション作成
  12. conn = fake_region.connect(
  13.     aws_access_key_id=AWS_ACCESS_KEY,
  14.     aws_secret_access_key=AWS_SECRET_KEY,
  15.     port=9324,
  16.     is_secure=False
  17. )
  18. # 任意の名前を指定して、キューを取得
  19. queue = conn.create_queue(queue_name)
  20. # キューにメッセージを投入
  21. queue.write(Message(body='QUEUE TEST'))




Pythonのプログラムを実行すると、ElasticMQのコンソールに
こんな内容が出力されました。


22:48:48.301 [elasticmq-akka.actor.default-dispatcher-5]
INFO o.elasticmq.actor.QueueManagerActor -
Creating queue QueueData(test_queue,MillisVisibilityTimeout(30000),
PT0S,PT0S,2015-03-31T22:48:48.271+09:00,2015-03-31T22:48:48.285+09:00)







メッセージの取り出し



登録したメッセージを取り出します。


  1. # -*- coding:utf-8 -*-
  2. from boto.sqs import regioninfo
  3. from boto.sqs.message import Message
  4. AWS_ACCESS_KEY='dummy_access_key'
  5. AWS_SECRET_KEY='dummy_secret_key'
  6. queue_name = 'test_queue'
  7. name = "elasticmq"
  8. endpoint = "192.168.1.104"
  9. # エンドポイントをサーバーIPとした仮想のリージョンを作成
  10. fake_region = regioninfo.SQSRegionInfo(name=name, endpoint=endpoint)
  11. # コネクション作成
  12. conn = fake_region.connect(
  13.     aws_access_key_id=AWS_ACCESS_KEY,
  14.     aws_secret_access_key=AWS_SECRET_KEY,
  15.     port=9324,
  16.     is_secure=False
  17. )
  18. # 任意の名前を指定して、キューを取得
  19. queue = conn.create_queue(queue_name)
  20. # 実運用では、これ以降を無限ループとする
  21. # 取得するメッセージの個数を指定して、メッセージを取得
  22. msgs = queue.get_messages(10)
  23. for msg in msgs:
  24.     # 内容を表示
  25.     print msg.get_body()
  26.     
  27.     # 処理したメッセージを削除
  28.     queue.delete_message(msg)




うまく取り出せました。


$ python sample.py
QUEUE TEST




再度実行すると、既にメッセージは削除されているので
何も表示されません。


$ python sample.py
$





関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2015/03/31(火) 22:59:59|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Amazon SQS互換メッセージキュー「ElasticMQ」にPHP + aws-sdkでキューを登録する | ホーム | PHP aws-sdkでPathStyleを指定し、fake-s3からデータを取得する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1709-096e46b6
この記事にトラックバックする(FC2ブログユーザー)