320 lines
9 KiB
Text
320 lines
9 KiB
Text
|
Running the Python Examples
|
||
|
============================
|
||
|
|
||
|
|
||
|
Running the Direct Examples
|
||
|
----------------------------
|
||
|
|
||
|
To run the direct examples, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2.Declare a message queue and bind it to an exchange by running declare_queues.py, as follows:
|
||
|
|
||
|
$ python declare_queues.py
|
||
|
|
||
|
This program has no output. After this program has been run, all messages sent to the amq.direct exchange using the routing key routing_key are sent to the queue named message_queue.
|
||
|
|
||
|
3.Publish a series of messages to the amq.direct exchange by running direct_producer.py, as follows:
|
||
|
|
||
|
$ python direct_producer.py
|
||
|
|
||
|
This program has no output; the messages are routed to the message queue, as instructed by the binding.
|
||
|
|
||
|
4. Read the messages from the message queue using direct_consumer.py or listener.py, as follows:
|
||
|
|
||
|
$ python direct_consumer.py
|
||
|
|
||
|
or
|
||
|
|
||
|
$ python listener.py
|
||
|
|
||
|
You should see the following output:
|
||
|
|
||
|
message 0
|
||
|
message 1
|
||
|
message 2
|
||
|
message 3
|
||
|
message 4
|
||
|
message 5
|
||
|
message 6
|
||
|
message 7
|
||
|
message 8
|
||
|
message 9
|
||
|
That's all, folks!
|
||
|
|
||
|
|
||
|
|
||
|
Running the Fanout Examples
|
||
|
----------------------------
|
||
|
|
||
|
To run the programs for the Fanout example, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2. In separate windows, start two or more fanout consumers or fanout listeners as follows:
|
||
|
|
||
|
$ python fanout_consumer.py
|
||
|
|
||
|
or
|
||
|
|
||
|
$ python listener.py
|
||
|
|
||
|
These programs each create a private queue, bind it to the amq.fanout exchange, and wait for messages to arrive on their queue.
|
||
|
|
||
|
3. In a separate window, publish a series of messages to the amq.fanout exchange by running fanout_producer.py, as follows:
|
||
|
|
||
|
$ python fanout_producer.py
|
||
|
|
||
|
This program has no output; the messages are routed to the message queue, as instructed by the binding.
|
||
|
|
||
|
4. Go to the windows where you are running consumers or listeners. You should see the following output for each listener or consumer:
|
||
|
|
||
|
message 0
|
||
|
message 1
|
||
|
message 2
|
||
|
message 3
|
||
|
message 4
|
||
|
message 5
|
||
|
message 6
|
||
|
message 7
|
||
|
message 8
|
||
|
message 9
|
||
|
That's all, folks!
|
||
|
|
||
|
|
||
|
|
||
|
Running the Publish-Subscribe Examples
|
||
|
---------------------------------------
|
||
|
|
||
|
To run the programs for the Publish-Subscribe example, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2. In separate windows, start one or more topic subscribers by running topic_subscriber.py, as follows:
|
||
|
|
||
|
$ python topic_subscriber.py
|
||
|
|
||
|
You will see output similar to this:
|
||
|
|
||
|
Queues created - please start the topic producer
|
||
|
Subscribing local queue 'local_news' to news-53408183-fcee-4b92-950b-90abb297e739'
|
||
|
Subscribing local queue 'local_weather' to weather-53408183-fcee-4b92-950b-90abb297e739'
|
||
|
Subscribing local queue 'local_usa' to usa-53408183-fcee-4b92-950b-90abb297e739'
|
||
|
Subscribing local queue 'local_europe' to europe-53408183-fcee-4b92-950b-90abb297e739'
|
||
|
Messages on 'news' queue:
|
||
|
|
||
|
Each topic consumer creates a set of private queues, and binds each queue to the amq.topic exchange together with a binding that indicates which messages should be routed to the queue.
|
||
|
|
||
|
3.In another window, start the topic publisher, which publishes messages to the amq.topic exchange, as follows:
|
||
|
|
||
|
$ python topic_publisher.py
|
||
|
|
||
|
This program has no output; the messages are routed to the message queues for each topic_consumer as specified by the bindings the consumer created.
|
||
|
|
||
|
4. Go back to the window for each topic consumer. You should see output like this:
|
||
|
|
||
|
Messages on 'news' queue:
|
||
|
usa.news 0
|
||
|
usa.news 1
|
||
|
usa.news 2
|
||
|
usa.news 3
|
||
|
usa.news 4
|
||
|
europe.news 0
|
||
|
europe.news 1
|
||
|
europe.news 2
|
||
|
europe.news 3
|
||
|
europe.news 4
|
||
|
That's all, folks!
|
||
|
Messages on 'weather' queue:
|
||
|
usa.weather 0
|
||
|
usa.weather 1
|
||
|
usa.weather 2
|
||
|
usa.weather 3
|
||
|
usa.weather 4
|
||
|
europe.weather 0
|
||
|
europe.weather 1
|
||
|
europe.weather 2
|
||
|
europe.weather 3
|
||
|
europe.weather 4
|
||
|
That's all, folks!
|
||
|
Messages on 'usa' queue:
|
||
|
usa.news 0
|
||
|
usa.news 1
|
||
|
usa.news 2
|
||
|
usa.news 3
|
||
|
usa.news 4
|
||
|
usa.weather 0
|
||
|
usa.weather 1
|
||
|
usa.weather 2
|
||
|
usa.weather 3
|
||
|
usa.weather 4
|
||
|
That's all, folks!
|
||
|
Messages on 'europe' queue:
|
||
|
europe.news 0
|
||
|
europe.news 1
|
||
|
europe.news 2
|
||
|
europe.news 3
|
||
|
europe.news 4
|
||
|
europe.weather 0
|
||
|
europe.weather 1
|
||
|
europe.weather 2
|
||
|
europe.weather 3
|
||
|
europe.weather 4
|
||
|
That's all, folks!
|
||
|
|
||
|
|
||
|
Running the Request/Response Examples
|
||
|
--------------------------------------
|
||
|
|
||
|
To run the programs for the Request/Response example, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2. Run the server.
|
||
|
|
||
|
$ python server.py
|
||
|
|
||
|
You should see the following output:
|
||
|
|
||
|
Request server running - run your client now.
|
||
|
(Times out after 100 seconds ...)
|
||
|
|
||
|
3. In a separate window, start a client:
|
||
|
|
||
|
$ python client.py
|
||
|
|
||
|
You should see the following output:
|
||
|
|
||
|
Request: Twas brillig, and the slithy toves
|
||
|
Request: Did gyre and gimble in the wabe.
|
||
|
Request: All mimsy were the borogroves,
|
||
|
Request: And the mome raths outgrabe.
|
||
|
Messages on queue: reply_to:db0f862e-6b36-4e0f-a4b2-ad049eb435ce
|
||
|
Response: TWAS BRILLIG, AND THE SLITHY TOVES
|
||
|
Response: DID GYRE AND GIMBLE IN THE WABE.
|
||
|
Response: ALL MIMSY WERE THE BOROGROVES,
|
||
|
Response: AND THE MOME RATHS OUTGRABE.
|
||
|
No more messages!
|
||
|
|
||
|
|
||
|
Running the XML-based Routing Examples
|
||
|
---------------------------------------
|
||
|
|
||
|
To run the programs for the XML-based Routing example, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2. Declare an XML exchange and a message queue, then bind the queue to the exchange by running declare_queues.py, as follows:
|
||
|
|
||
|
$ python declare_queues.py
|
||
|
|
||
|
This program has no output. After this program has been run, all messages sent to the xml exchange using the routing key weather are sent to the queue named message_queue if they satisfy the conditions specified in the following XQuery, which is used in the binding:
|
||
|
|
||
|
let $w := ./weather
|
||
|
return $w/station = 'Raleigh-Durham International Airport (KRDU)'
|
||
|
and $w/temperature_f > 50
|
||
|
and $w/temperature_f - $w/dewpoint > 5
|
||
|
and $w/wind_speed_mph > 7
|
||
|
and $w/wind_speed_mph < 20
|
||
|
|
||
|
3. Publish a series of messages to the xml exchange by running xml_producer.py, as follows:
|
||
|
|
||
|
$ python xml_producer.py
|
||
|
|
||
|
The messages are routed to the message queue, as prescribed by the binding. Each message represents a weather report, such as this one:
|
||
|
|
||
|
<weather>
|
||
|
<station>Raleigh-Durham International Airport (KRDU)</station>
|
||
|
<wind_speed_mph>16</wind_speed_mph>
|
||
|
<temperature_f>70</temperature_f>
|
||
|
<dewpoint>35</dewpoint>
|
||
|
</weather>
|
||
|
|
||
|
4. Read the messages from the message queue using direct_consumer.py or listener.py, as follows:
|
||
|
|
||
|
$ python xml_consumer.py
|
||
|
|
||
|
or
|
||
|
|
||
|
$ python listener.py
|
||
|
|
||
|
You should see the following output:
|
||
|
|
||
|
<weather><station>Raleigh-Durham International Airport (KRDU)</station>
|
||
|
<wind_speed_mph>16</wind_speed_mph><temperature_f>70</temperature_f>
|
||
|
<dewpoint>35</dewpoint></weather>
|
||
|
|
||
|
|
||
|
Running the Headers Examples
|
||
|
-----------------------------
|
||
|
|
||
|
To run the headers examples, do the following:
|
||
|
|
||
|
1. Make sure that a qpidd broker is running:
|
||
|
|
||
|
$ ps -eaf | grep qpidd
|
||
|
|
||
|
If a broker is running, you should see the qpidd process in the output of the above command.
|
||
|
|
||
|
2.Declare a message queues and bind them to an exchange by running declare_queues.py, as follows:
|
||
|
|
||
|
$ python declare_queues.py
|
||
|
|
||
|
This program has no output. After this program has been run, all messages sent to the amq.match exchange with an application-header of {'class': 'first'} will be routed to the queue named "first" and messages with an application-header of {'class': 'second'} will be routed to the queue named "second".
|
||
|
|
||
|
3.Publish a series of messages to the amq.match exchange by running headers_producer.py, as follows:
|
||
|
|
||
|
$ python headers_producer.py
|
||
|
|
||
|
This program has no output; the messages are routed to the message queues, as instructed by the bindings.
|
||
|
|
||
|
4. Read the messages from the message queues using headers_consumer.py as follows:
|
||
|
|
||
|
$ python headers_consumer.py
|
||
|
|
||
|
You should see the following output:
|
||
|
|
||
|
message(first) 0
|
||
|
message(first) 1
|
||
|
message(first) 2
|
||
|
message(first) 3
|
||
|
message(first) 4
|
||
|
message(first) 5
|
||
|
message(first) 6
|
||
|
message(first) 7
|
||
|
message(first) 8
|
||
|
message(first) 9
|
||
|
That's all, folks!
|
||
|
message(second) 0
|
||
|
message(second) 1
|
||
|
message(second) 2
|
||
|
message(second) 3
|
||
|
message(second) 4
|
||
|
message(second) 5
|
||
|
message(second) 6
|
||
|
message(second) 7
|
||
|
message(second) 8
|
||
|
message(second) 9
|
||
|
That's all, folks!
|