java - How to receive message from wildfly jms queue using consumer -
i encountered knotty problem when receiving message wildfly jms queue,my code blow:
session producesession = connectionfactory.createconnection().createsession(false, session .client_acknowledge); session consumersession = connectionfactory.createconnection().createsession(false, session .client_acknowledge); apsschedule apsschedule = new apsschedule(); boolean success; messageproducer messageproducer = producesession.createproducer(outqueuemaxusorder); success = apsschedule.sendd90order(producesession,messageproducer, d90orderaps); if (!success) { logger.error("can't send aps schedule msg "); } else { messageconsumer consumer = consumersession.createconsumer(inqueuedeliverydate); data = apsschedule.received90result(consumersession,consumer); }
then getting received90result():
public deliverydata received90result(session session, messageconsumer consumer) { deliverydata data = null; try { message message = consumer.receive(10000); if (message == null) { return null; } textmessage msg = (textmessage) message; string text = msg.gettext(); logger.debug("receive aps d90 result: {}", text); objectmapper mapper = new objectmapper(); data = mapper.readvalue(text, deliverydata.class); } catch (jmsexception je) { logger.error("can't receive aps d90 order result: {}", je.getmessage()); } catch (exception e) { e.printstacktrace(); } { try { consumer.close(); } catch (jmsexception e) { e.printstacktrace(); } } return data; }
but when implementing consumer.receive(10000), project cann't message queue. if use asynchronous way of mdb listen queue,i can message queue. how resolve ? have spent 2 days resolving ,i out of mind.could me?thx!thx!thx!
there multiple modes can choose message queue. message queues default asynchronous in usage. there cases when want read synchronously , example sending message account number , using queue read response , match message id or message correlation id. when receive , program waiting message arrive within polling interval specified in receive.
the code snippet have , see uses psuedo synchronous approach. if have use mdb , have implement message driven bean (ejb resource) or message listener.
the way mdb/message listener works more event based , instead of poll timeout (like receive) , implement callback called onmessage() invoked every time there message. instead of synchronous call , becomes asynchronous. application may require changes both in terms of design.
Comments
Post a Comment