qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gordon Sim <g...@redhat.com>
Subject Re: C++ Client Question
Date Wed, 03 Dec 2008 15:24:33 GMT
Ted Ross wrote:
> I have a usage question about the C++ client api that is not addressed 
> by the examples.
> 
> My application needs to maintain a connection to the broker.  If the 
> connection cannot be established, the application retries based on an 
> increasing interval.  If the established connection is dropped, the 
> application attempts to reconnect.
> 
> This code fragment is the body (run method) of a connection thread (with 
> non-pertinent details removed for simplicity):
> 
> 
>    Connection connection;
>    Session session;
>    SubscriptionManager *subscriptions;
> 
>    ...
> 
>    while (true) {
>        try {
>            connection.open(connectionSettings);
>            session = connection.newSession(queueName-string);
>            subscriptions = new client::SubscriptionManager(session);
>            subscriptions->subscribe(listener, queueName-string, 
> dest-string);
>            try {
>               subscriptions->run();
>            } catch (exception) {}
> 
>            connection.close();
>            delete subscriptions;
>            subscriptions = 0;
>        } catch (exception &e) {
>            // adjust sleep delay
>        }
>        ::sleep(delay);
>    }
> 
> 
> Questions:
> 
> 1) Is it ok to reuse the connection object (i.e. open => close => open)?

Should be; the state is all in ConnectionImpl of which a new instance is 
created on open().

> 2) Is it ok to reuse the session object? 

Yes.

> Note that I never call 
> session.close or explicitly invoke its destructor.

You may want to session.sync() before closing if you are sending any 
commands messages to the broker using an AsyncSession.

> 3) Is there anything wrong or inadvisable with the way I've done this?

You can catch TransportFailure as an indication of loss of connection 
without any logical error occurring. An auto_ptr for the 
SubscriptionManager pointer might be nicer, or even just allocate it on 
the stack.

Mime
View raw message