LoginSignup
1
2

More than 5 years have passed since last update.

botoでElasticMQに繋ぐ

Last updated at Posted at 2015-05-29

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)
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2