qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carl Trieloff <cctriel...@redhat.com>
Subject Re: Session Disconnects in Python - how to resolve
Date Wed, 31 Dec 2008 02:55:46 GMT
Joshua Kramer wrote:
> Hello,
> If I do something 'funny' (defined below), the qpidd disconnects the 
> session.  What is the best way to handle this - is there a session 
> reconnect method, or do I create a new session?  Are the qpidd and 
> Python objects gracefully destroyed if I create a new session?

AMQP uses a disconnect to signal significant errors, this in general is 
good practice, as once you have had an error, it is better to pick back 
up from a well know point.

This can be done in two ways, create a new session, or re-attach.

Note that a session and all the related state will be destroyed when the 
session is terminated. The session gets terminated when it expires 
(time-out since last traffic) which can
be set from anything on 0 to infinity I believe.

So there are two patterns to choose from:
- set the session time-out to 0 and recreate what you need
- set the session time-out to something reasonable for your application 
and re-attach.

In both cases you need to work through through the logic to recreate the 
resources you need, if you want to deal with the case that the broker 
can be killed.

> Definition of 'funny':
> I am writing a server daemon in Python.  The daemon may be run a first 
> time, which means it needs to create a local queue on which to listen, 
> and then create a server queue to which the local queue can be 
> subscribed. The daemon may also be run again (on the same or a 
> different machine to provide additional threads servicing requests), 
> in which case it needs to create a local queue and subscribe to the 
> server queue.
> I am doing it in the manner:  I first create a local queue and 
> subscribe it to a server queue.  If I get a 
> qpid.session.SessionException, the server queue must not exist... so I 
> then create the server queue, create the local queue, and subscribe it 
> to the server queue.
> I did not account for the fact that the qpidd server disconnects the 
> session when it can't find the server queue.

why not just declare it regardless?


View raw message