[rabbitmq-discuss] AMQP & Python Write-Up

Barry Pederson bp at barryp.org
Thu Jan 15 00:28:48 GMT 2009


Gordon Sim wrote:
> Jason J. W. Williams wrote:
>> I've written up a quick start on the basics of AMQP and using it in
>> Python, that is the kind of document I wished I'd been able to find in
>> one place: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/
>>
>> It's probably laced with errors, and I'd appreciate any
>> feedback/corrections.
> 
> Nice article!
> 
> I am not that familiar with py-amqplib but the no_ack argument to 
> basic_consume/basic_get is defined in the AMQP spec to mean that the 
> server should not expect an ack and should discard the message on 
> delivery. I.e. its an unreliable mode of delivery[1] rather than a 
> signal to the client library to automatically acknowledge on receiving a 
> message.

I just read the article too, very nice.

Gordon's right about the no_ack flag, this sentence:

   If you set the no_ack argument to true, then py-amqplib will
   automatically send the acknowledgement immediately for you.

should probably instead say something like what Gordon mentions above - 
it's the broker that acts differently based on that flag, not the client 
library.

The only other thing I noticed was this section:

----
Now, there’s two methods of getting messages out of the queue. The first 
is to call chan.basic_get() to pull the next message off the queue:

    1. msg = chan.basic_get("po_box")
    2. print msg.body()
    3. chan.basic_ack(msg.delivery_tag)
----

If there isn't a message waiting in the queue when line 1 executes, then 
msg is set to None and line 2 will die since None does not have a "body" 
attribute.  Also, body is not a function to call, it's just a string, so 
this would be more appropriate:

     msg = chan.basic_get("po_box")
     if msg is not None:
	print msg.body
         chan.basic_ack(msg.delivery_tag)

================

	Barry






More information about the rabbitmq-discuss mailing list