spring - Trying to get the message from server but receive call gets blocked -
// send message sending message server, working fine
public void sendmessage(com.google.protobuf.message sendmessage) {
try { createjmstemplate(); createjmstemplatereciever(); jmsmessagecreator jmsmessagecreator = new jmsmessagecreator() { @override public message createmessage(session session) throws jmsexception { bytesmessage msg = session.createbytesmessage(); msg.writebytes(sendmessage.tobytearray()); return msg; } }; messagecreator messagecreator = new messagecreator() { public message createmessage(session session) throws jmsexception { message msg = jmsmessagecreator.createmessage(session); msg.setjmscorrelationid("2708"); return msg; } }; jmstemplate.send(messagecreator); system.out.println("message sent... "); } catch (exception e) { e.printstacktrace(); system.exit(0); } }
//but when calling method, @ receive call gets blocked...
public void recievemessage() { try {
bytemessage = (bytesmessage) jmstemplatereciever.receive(); try { if (bytemessage != null) { byte[] bytearr = new byte[(int) bytemessage.getbodylength()]; (int = 0; < (int) bytemessage.getbodylength(); i++) { bytearr[i] = bytemessage.readbyte(); string s = new string(bytearr); system.out.println(s); } string s = new string(bytearr); system.out.println(s); bytemessage.acknowledge(); } } catch (jmsexception e) { } } catch (exception e) { e.printstacktrace(); system.exit(0); } } }
as described in section 9.2.2 of jms 1.1 specification, receive() call blocks indefinitely until message arrives on queue. hence call getting blocked in application.
one option specify wait time, example receive(3000) waits 3 seconds , comes out if no message arrives in 3 seconds. jms implementer might providing form of receive method method returns if there no messages in queue.
the other option use message listener receiving messages asynchronously described jms 1.1 specifications section 9.3.1. application gets notified jms provider whenever message arrives in queue.
Comments
Post a Comment