On 03/09/14 23:29, Alan Conway wrote:
On Wed, 2014-09-03 at 20:05 +0100, Fraser Adams wrote:
Hello,
I've probably missed something, but I don't know how to reliably detect
failures and reconnect.
So if I sent to an address with a freshly stood up Messenger instance
and the address can't be found things aren't too bad and I wind up with
an ECONNREFUSED that I could do something with, however if I've been
sending messages to a valid address then I kill off the consumer I see a:
[0x513380]:ERROR amqp:connection:framing-error connection aborted
[0x513380]:ERROR[-2] connection aborted
CONNECTION ERROR connection aborted (remote)
The thing is that all of these are *internally* generated messages sent
to the console via fprintf, so my *application* doesn't really know
about them (though I could be crafty and interpose my own cheeky fprintf
to intercept them). That doesn't quite sound like the desired behaviour
for a robust system?
Similarly should I actually trap an error what's the correct way to
continue, as it happens currently my app carries on silently doing
nothing useful and continuing to do so even when the peer restarts (so
there is no magic internal reconnection logic as far as I can see).
do I have to do a
messenger.stop()
messenger.start()
cycle to get things going again, I'm guessing so, but I'll like to know
what the "correct"/expected way to create Messenger code that is robust
against remote failures, as far as I can see there are no examples of
that sort of thing?
I've come up against similar problems, I think it's an area that needs
some work in Proton. Is anybody already working on/thinking about this
area?
Cheers,
Alan.
I'd definitely like to know how others deal with this sort of thing.
For info notwithstanding not necessarily being able to trap all the
errors without being devious around fprintf (which to be fair works,
but it's a bit sneaky and if you have multiple Messenger instances won't
tell you which one the error relates to) but when I do get an error I
appear to have to start from scratch - in other words:
message.free();
messenger.free();
message = new proton.Message();
messenger = new proton.Messenger();
messenger.start();
If I try to restart the original messenger or use existing queue I get
no joy. It's not the end of the world but I've no idea what robust
Messenger code is *supposed* to look like.
Presumably Alan and I aren't the only people who might like to be able
to trap errors and restart? Or does every one else write code that never
fails ;->
F.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]