1、一個Queue時候,Sender和Receiver使用同一個Queue
[Sender]
QueueSession queueSession = queueConnection.createQueueSession(transacted, acknowledgementMode);
QueueSender queueSender = queueSession.createSender(queue);
TextMessage textMessage = queueSession.createTextMessage();
textMessage.clearBody();
textMessage.setText(message);
queueSender.send(textMessage);
[Receiver]
QueueSession queueSession = queueConnection.createQueueSession(transacted, acknowledgementMode);
QueueReceiver queueReceiver = queueSession.createReceiver(queue);
queueReceiver.setMessageListener(msgRcvr);
//msgRcvr-->MessageListener的onMessage方法
public synchronized void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("Message content is:" + textMessage.getText());
}catch (JMSException e) {
e.printStackTrace();
}
}
}
2、兩個Queue時候
a.可以使用兩個Queue
b.可以是一個普通的Queue,一個TemporaryQueue
[Sender]
QueueSession queueSession = queueConnection.createQueueSession(transacted, acknowledgementMode);
Queue tempQueue = queueSession.createTemporaryQueue();
String cID = (int)(Math.random()*10)+"";
TextMessage textMessage = queueSession.createTextMessage();
textMessage.setJMSCorrelationID(cID);
textMessage.setJMSReplyTo(tempQueue);
textMessage.setText(message);
QueueSender queueSender = queueSession.createSender(senderQueue);
queueSender.send(textMessage);
QueueReceiver queuereceiver = queueSession.createReceiver(tempQueue,"JMSCorrelationID='" + cID +"'");
Message msg = queuereceiver.receive(5000);
if (msg instanceof TextMessage) {
System.out.println("RETURN Message:" + ((TextMessage)msg).getText());
}
[Receiver]
public synchronized void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage oldMessage = (TextMessage) message;
Queue tempQueue = (Queue)oldMessage.getJMSReplyTo();
queueSender = queueSession.createSender(tempQueue);
TextMessage newMessage = queueSession.createTextMessage();
newMessage.setJMSCorrelationID(oldMessage.getJMSCorrelationID());
newMessage.setText("test");
queueSender.send(newMessage);
}
【注】
1)JMSCorrelationID 比較關鍵,只是一個身分標識,上面有3個地方使用
2)Template 用于臨時template中,她的設置影響 cID
如果String cID = (Math.random()*10) + ""; 拋出“Byte quota exceeded for...”于template 設置有關