pythonからElasticMQにメッセージキューイングする
プロジェクトではAmazon SQSを使ってます。
開発環境でAmazonSQSを使うとお金がかかるのでAmazonSQS互換のElasticMQというScala製のメッセージキューを使ってます。
ロングポーリングするバックグラウンドで動くプログラムをScalaで作ってるのですが、デバッグ用にjson形式でエンキューするスクリプトが欲しかったのでささっと作りました。 AWS SDKはbotoを使ってます。
# botoのインストール $ sudo yum install pip $ pip install boto
デバッグ用のスクリプトはこれ。
ElasticMQに投げる場合は、AWSアクセスキー/シークレットアクセスキーは適当な文字列入れておけばOKです。
いじるのはキュー名とエンドポイントくらいだと思います。
elasticmq_test.py
# -*- coding: utf-8 -*- from boto.sqs import regioninfo from boto.exception import SQSError from boto.sqs.message import RawMessage def post_mq(message): AWS_ACCESS_KEY='dummy_access_key' AWS_SECRET_KEY='dummy_secret_key' queue_name = 'your_queue_name' name = "elasticmq" endpoint = "localhost" fake_region = regioninfo.SQSRegionInfo(name=name, endpoint=endpoint) # コネクション作成 conn = fake_region.connect( aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY, port=9324, is_secure=False ) queue = conn.get_queue(queue_name) try: # キューにメッセージを投入 queue.write(RawMessage(body=message)) except SQSError, e: print e.status, e.reason, e.body if __name__ == "__main__": import sys import json message = "" if len(sys.argv) != 2: print "usage: python elasticmq_test.py hogehoge.json" sys.exit(1) f = open(sys.argv[1], 'r') message = json.load(f) json_string = json.dumps(message) post_mq(json_string)
実行の仕方は
$ python elasticmq_test.py hogehoge.json
メッセージの最大サイズがたしか256KBとかだったので、バカでかいjsonを送ろうとすると死にます。