Edited at

botoでElasticMQに繋ぐ

More than 3 years have passed since last update.


botoでElasticMQに繋ぐ

Amazon SQS のローカルでの代用。

botoconnect_to_region 使った方法はよく出てくるけど、

ローカルの ElasticMQ だと regioninfo.SQSRegionInfo で繋がないとならないので、それのメモ書き。

is_secureTrue にすると https になるらしい。


準備

ElasticMQ は落としてきて起動しておく。

デフォルトならポートは9324かな。

$ java -jar ~/opt/elasticmq-server-0.8.8.jar


送るやつ

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys
from boto.sqs import regioninfo
from boto.sqs.message import Message

AWS_ACCESS_KEY = 'TEST' # EMQならなんでもいい
AWS_SECRET_KEY = 'TEST' # EMQならなんでもいい

SQS_REGION = "emq" # EMQならなんでもいい
SQS_ENDPOINT = "localhost"

# AWSの場合
# SQS_REGION = "ap-northeast-1"
# SQS_ENDPOINT = "sqs.ap-northeast-1.amazonaws.com"

SQS_QUEUE_NAME = 'dev_messages'
PORT = 9324 # AWSなら80 / もしくは指定しない

region = regioninfo.SQSRegionInfo(name=SQS_REGION, endpoint=SQS_ENDPOINT)
conn = region.connect(
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_KEY,
port=PORT,
is_secure=False
);

queue = conn.create_queue(SQS_QUEUE_NAME)
msg = Message(
body='QUEUE TEST',
)
msg.message_attributes = {
"name1": {
"data_type": "String",
"string_value": "I am a string"
},
}
queue.write(msg)


受けるやつ

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys
from boto.sqs import regioninfo
from boto.sqs.message import Message

AWS_ACCESS_KEY = 'TEST' # EMQならなんでもいい
AWS_SECRET_KEY = 'TEST' # EMQならなんでもいい

SQS_REGION = "emq" # EMQならなんでもいい
SQS_ENDPOINT = "localhost"

# AWSの場合
# SQS_REGION = "ap-northeast-1"
# SQS_ENDPOINT = "sqs.ap-northeast-1.amazonaws.com"

SQS_QUEUE_NAME = 'dev_messages'
PORT = 9324 # AWSなら80 / もしくは指定しない

region = regioninfo.SQSRegionInfo(name=SQS_REGION, endpoint=SQS_ENDPOINT)
conn = region.connect(
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_KEY,
port=PORT,
is_secure=False
);

queue = conn.get_queue(SQS_QUEUE_NAME)
queue.set_attribute('ReceiveMessageWaitTimeSeconds', 20)

import json

msgs = queue.get_messages(10)
for msg in msgs:
print json.dumps(msg.__dict__, default=str)
queue.delete_message(msg)