//这是从我向服务器发送消息的发送消息,其工作正常
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);
}
}
//但是当我调用此方法时,在接听电话时会被阻止...
public void recieveMessage(){ 试试{
byteMessage = (BytesMessage) jmsTemplateReciever.receive();
try {
if (byteMessage != null) {
byte[] byteArr = new byte[(int) byteMessage.getBodyLength()];
for (int i = 0; i < (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);
}
} }
答案 0 :(得分:0)
如JMS 1.1规范第9.2.2节所述,receive()
调用无限期地阻塞,直到消息到达队列。因此,您的应用程序中的呼叫会被阻止。
一个选项是指定一个等待时间,例如receive(3000)
等待3秒,如果没有消息在3秒内到达则出现。 JMS实现者可能会提供另一种形式的receive
方法,如果队列中没有消息,该方法会立即返回。
另一种选择是使用消息监听器来异步接收消息,如JMS 1.1规范第9.3.1节所述。每当消息到达队列时,JMS提供程序都会通知您的应用程序。