import java.util.Scanner;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import com.ibm.mq.jms.MQQueueConnectionFactory;
public class MQSender implements MessageListener{
MQQueueConnectionFactory mcf;
QueueConnection qconn;
final String HOSTNAME = "127.0.0.1";
final int PORT = 1414;
final String QUEUEMANAGER_NAME = "QM1";
final String QUEUE_NAME = "Q1";
final String QUEUE_NAME2 = "Q2";
boolean replyed = false;
private void openConnection() throws JMSException {
mcf = new MQQueueConnectionFactory();
mcf.setHostName(HOSTNAME);
mcf.setPort(PORT);
mcf.setQueueManager(QUEUEMANAGER_NAME);
qconn = mcf.createQueueConnection();
qconn.start();
}
private void sendMessage(String msgInfo) throws JMSException, InterruptedException {
openConnection();
QueueSession session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(QUEUE_NAME);
Queue responseQueue = session.createQueue(QUEUE_NAME2);
QueueSender sender = session.createSender(queue);
TextMessage msg = session.createTextMessage();
// msg.setJMSCorrelationID("123-123456");
// msg.setIntProperty("AccountID", 123);
msg.setJMSReplyTo(responseQueue); //设置回复队列
msg.setText(msgInfo);
sender.send(msg);
System.out.println("消息发送 : JMSMessage" + msg.getJMSMessageID());
//接收回复信息
System.out.println("等待客户端回复队列:"+ msg.getJMSReplyTo());
String filter = "JMSCorrelationID='" + msg.getJMSMessageID() + "'";
QueueReceiver reply = session.createReceiver(responseQueue,filter);
//同步方式等待接收回复
// TextMessage resMsg = (TextMessage) reply.receive(60 * 1000);
// if(resMsg != null){
// System.out.println("客户端回复消息 : " + resMsg.getText() + " JMSCorrelation" + resMsg.getJMSCorrelationID());
// }else{
// System.out.println("等待超时!");
// }
//异步方式接收回复
reply.setMessageListener(this);
while(!replyed)
Thread.sleep(1000);
qconn.stop();
sender.close();
session.close();
disConnection();
}
public void onMessage(Message message) {
try {
String textMessage = ((TextMessage) message).getText();
System.out.println("客户端回复消息 : " + textMessage+ " JMSCorrelation" + message.getJMSCorrelationID());
} catch (JMSException e) {
e.printStackTrace();
}finally{
replyed = true;
}
}
private void disConnection() throws JMSException {
qconn.close();
}
public static void main(String[] args) throws JMSException, InterruptedException {
MQSender ms = new MQSender();
Scanner scan = new Scanner(System.in);
System.out.print("输入信息:");
ms.sendMessage(scan.next());
System.out.print("消息发送完毕!");
}
}
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import com.ibm.mq.jms.MQQueueConnectionFactory;
public class MQRecevicer implements MessageListener{
MQQueueConnectionFactory mcf;
QueueConnection qconn;
QueueSession session;
final String HOSTNAME = "127.0.0.1";
final int PORT = 1414;
final String QUEUEMANAGER_NAME = "QM1";
final String QUEUE_NAME = "Q1";
final String QUEUE_NAME2 = "Q2";
boolean replyed = false;
public void openConnection() throws JMSException {
mcf = new MQQueueConnectionFactory();
mcf.setHostName(HOSTNAME);
mcf.setPort(PORT);
mcf.setQueueManager(QUEUEMANAGER_NAME);
qconn = mcf.createQueueConnection();
qconn.start();
}
public void disConnection() throws JMSException {
qconn.close();
}
public void recevicerMessage(String reply) throws JMSException, InterruptedException {
openConnection();
session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(QUEUE_NAME);
QueueReceiver recevier = session.createReceiver(queue);
//同步方式接收消息并回复
// TextMessage textMessage = (TextMessage) recevier.receive();
// System.out.println("接收消息 : " + textMessage.getText() + " JMSMessage" +textMessage.getJMSMessageID());
// Queue responseQueue = (Queue) textMessage.getJMSReplyTo();
// if(responseQueue != null){
// TextMessage responseMsg = session.createTextMessage();
// responseMsg.setJMSCorrelationID(textMessage.getJMSMessageID());
// responseMsg.setText("This message is reply from client..."+textMessage.getText());
// session.createSender(responseQueue).send(responseMsg);
// System.out.println("客户端回复队列:"+responseQueue.toString()+" JMSCorrelation"+responseMsg.getJMSCorrelationID());
// }else{
// System.out.println("服务端回复队列为空");
// }
//异步方式接收消息并回复
recevier.setMessageListener(this);
while(!replyed)
Thread.sleep(1000);
qconn.stop();
recevier.close();
session.close();
disConnection();
}
public void onMessage(Message message) {
try {
String textMessage = ((TextMessage) message).getText();
System.out.println("接收消息 : " + textMessage + " JMSMessage" +message.getJMSMessageID());
Queue responseQueue = (Queue) message.getJMSReplyTo();
if(responseQueue != null){
TextMessage responseMsg = session.createTextMessage();
responseMsg.setJMSCorrelationID(message.getJMSMessageID());
responseMsg.setText("This message is reply from client:"+textMessage);
session.createSender(responseQueue).send(responseMsg);
System.out.println("客户端回复队列:"+responseQueue+" JMSCorrelation"+responseMsg.getJMSCorrelationID());
}else{
System.out.println("服务端回复队列为空");
}
} catch (JMSException e) {
e.printStackTrace();
}finally{
replyed = true;
}
}
public static void main(String[] args) throws JMSException, InterruptedException {
MQRecevicer mr = new MQRecevicer();
System.out.println("正在接收消息...");
mr.recevicerMessage("消息已经收到,这是接收端的回复!");
System.out.println("消息接收完毕!");
}
}