# Simple message queue test using
# the boto library
# see: http://code.google.com/boto
# Import needed objects
from boto.sqs.connection import SQSConnection
from boto.sqs.message import Message
# Establish a connection with SQS
# Put your IDs here
aws_access_id = ''
aws_secret_key = ''
conn = SQSConnection(aws_access_id, aws_secret_key)
# Create a message queue
mq = conn.create_queue('InfoQueue')
# Create a message object and put some content in it
msg = Message()
msg.set_body('This is our first message to SQS')
# Send the message -- report results
rset = mq.write(msg)
print 'Result of write: ' + rset.StatusCode
# Now loop until message(s) appear in the queue
rset = mq.get_messages()
if len(rset) != 0 : break
# Print out the messages
# Delete each message after printing
for msg in rset:
# All done ... delete the queue
The code is about as straightforward as it gets. I only needed to import two classes from the boto library: SQSConnection and Message. The instantiation of an SQSConnection object required two arguments: an AWS access ID and an AWS secret key. If you don't want to put your ID and key directly in the code, a variant of the SQSConnection constructor (with no arguments) will read the information from a pair of environment variables.
Once the connection object is established, one can create a queue with a call to the method create_queue("<queue name>"). If the queue already exists, the object returned represents the existing queue. Next, I instantiated a Message object and wrote the message content via the set_body() method. A call to mq.write(msg) sends the message on its way.
The method get_messages() reads all messages on the queue and returns them in a list object. I can use a while: loop to wait for my sent message to show up, then step through the returned list, printing each message's body and deleting it from the queue. (Remember, reading a message from a queue does not delete it. The message is locked for a predetermined period of time.) Finally, I delete the queue itself.
The code is simple, in keeping with AWS's central tenet, but all the fundamentals of interacting with SQS are present. The boto library -- and the Python language -- make it a snap to test an idea with "live" code, then move the results into a project once you've confirmed that your routines are working correctly.
Read more about cloud computing in InfoWorld's Cloud Computing Channel.