#!/usr/bin/env python """ topic_publisher.py This is a simple AMQP publisher application that uses a Topic exchange. The publisher specifies the routing key and the exchange for each message. """ import qpid import sys import os from random import randint from qpid.util import connect from qpid.connection import Connection from qpid.datatypes import Message from qpid.queue import Empty #----- Initialization ----------------------------------- # Set parameters for login. host=len(sys.argv) > 1 and sys.argv[1] or "127.0.0.1" port=len(sys.argv) > 2 and int(sys.argv[2]) or 5672 user="guest" password="guest" amqp_spec="" try: amqp_spec = os.environ["AMQP_SPEC"] except KeyError: amqp_spec="/usr/share/amqp/amqp.0-10.xml" # Create a connection. conn = Connection (connect (host,port), qpid.spec.load(amqp_spec)) conn.start() session = conn.session(str(randint(1,64*1024))) #----- Publish some messages ------------------------------ # Create some messages and put them on the broker. Use the # topic exchange. The routing keys are "usa.news", "usa.weather", # "europe.news", and "europe.weather". def send_msg(routing_key): props = session.delivery_properties(routing_key=routing_key) for i in range(5): session.message_transfer("amq.topic", None, None, Message(props,"message " + str(i))) # usa.news send_msg("usa.news") # usa.weather send_msg("usa.weather") # europe.news send_msg("europe.news") # europe.weather send_msg("europe.weather") # Signal termination props = session.delivery_properties(routing_key="control") session.message_transfer("amq.topic",None, None, Message(props,"That's all, folks!")) #----- Cleanup -------------------------------------------- # Clean up before exiting so there are no open threads. session.close(timeout=10)