java - How to handle producer flow control in jms messaging while using apache qpid -
java - How to handle producer flow control in jms messaging while using apache qpid -
i trying handle flow command situation on producer end. have queue on qpid-broker max queue-size set. have flow_stop_count , flow_resume_count set on queue.
now @ producer keeps on continuously producing messages until flow_stop_count reached. upon breach of count, exception thrown handled exception listener. sometime later consumer on queue grab , flow_resume_count reached. question how producer know of event.
here's sample code of producer
connection connection = connectionfactory.createconnection(); connection.setexceptionlistenr(new myexceptionlisterner()); connection.start(); session session = connection.createsession(false,session.client_acknowledge); queue queue = (queue)context.lookup("test"); messageproducer producer = session.createproducer(queue); while(notstopped){ while(suspend){//---------------------------how resume flag??? thread.sleep(1000); } textmessage message = session.createtextmessage(); message.settext("testmessage"); producer.send(message); } session.close(); connection.close();
and exception listener
private class myexceptionlistener implements exceptionlistener { public void onexception(jmsexception e) { system.out.println("got exception:" + e.getmessage()); suspend=true; } }
now exceptionlistener generic listener exceptions, should not thought suspend producer flow through that.
what need perhaps method on producer level , produer.isflowstopped() can utilize check before sending message. such functionality exist in qpid api.
there documentation on qpid website suggest can done. couldn't find examples of beingness done anywhere.
is there standard way of handling kind of scenario.
from have read apache qpid documentation seems flow_resume_count , flow_stop_count cause producers start getting blocked.
therefore alternative software wise poll @ regular intervals until messages start flowing again.
extract here.
if producer sends queue overfull, broker respond instructing client not send more messages. impact of future attempts send block until broker rescinds flow command order.
while blocking client periodically log fact blocked waiting on flow control.
warn amqsession - broker enforced flow command has been enforced warn amqsession - message send delayed 5s due broker enforced flow command warn amqsession - message send delayed 10s due broker enforced flow command after set period send timeout , throw jmsexception calling code.
error amqsession - message send failed due timeout waiting on broker enforced flow control.
from documentation implicates software managing producer have self manage. when receive exception queue overfull need off , poll , reattempt send messages.
java jms messaging qpid
Comments
Post a Comment