MQ JMS发送消息并接收客户端回复

来源:互联网 发布:淘宝上好吃的零食推荐 编辑:程序博客网 时间:2024/05/22 03:03

[java] view plaincopy
  1. import java.util.Scanner;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.MessageListener;  
  6. import javax.jms.Queue;  
  7. import javax.jms.QueueConnection;  
  8. import javax.jms.QueueReceiver;  
  9. import javax.jms.QueueSender;  
  10. import javax.jms.QueueSession;  
  11. import javax.jms.Session;  
  12. import javax.jms.TextMessage;  
  13.   
  14. import com.ibm.mq.jms.MQQueueConnectionFactory;  
  15.   
  16.   
  17. public class MQSender implements MessageListener{  
  18.   
  19.     MQQueueConnectionFactory mcf;  
  20.     QueueConnection qconn;  
  21.       
  22.     final String HOSTNAME = "127.0.0.1";  
  23.     final int PORT = 1414;  
  24.     final String QUEUEMANAGER_NAME = "QM1";  
  25.     final String QUEUE_NAME = "Q1";  
  26.     final String QUEUE_NAME2 = "Q2";  
  27.     boolean replyed = false;  
  28.       
  29.     private void openConnection() throws JMSException {  
  30.         mcf = new MQQueueConnectionFactory();  
  31.         mcf.setHostName(HOSTNAME);  
  32.         mcf.setPort(PORT);  
  33.         mcf.setQueueManager(QUEUEMANAGER_NAME);  
  34.         qconn = mcf.createQueueConnection();  
  35.         qconn.start();        
  36.     }  
  37.       
  38.       
  39.     private void sendMessage(String msgInfo) throws JMSException, InterruptedException {  
  40.         openConnection();  
  41.         QueueSession session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);  
  42.         Queue queue = session.createQueue(QUEUE_NAME);  
  43.         Queue responseQueue = session.createQueue(QUEUE_NAME2);  
  44.         QueueSender sender = session.createSender(queue);  
  45.           
  46.         TextMessage msg = session.createTextMessage();   
  47. //        msg.setJMSCorrelationID("123-123456");  
  48. //        msg.setIntProperty("AccountID", 123);  
  49.         msg.setJMSReplyTo(responseQueue);   //设置回复队列  
  50.         msg.setText(msgInfo);    
  51.         sender.send(msg);   
  52.         System.out.println("消息发送 : JMSMessage" + msg.getJMSMessageID());  
  53.           
  54.         //接收回复信息  
  55.         System.out.println("等待客户端回复队列:"+ msg.getJMSReplyTo());  
  56.         String filter = "JMSCorrelationID='" + msg.getJMSMessageID() + "'";    
  57.         QueueReceiver reply = session.createReceiver(responseQueue,filter);  
  58.          
  59.           
  60.         //同步方式等待接收回复  
  61. //        TextMessage resMsg = (TextMessage) reply.receive(60 * 1000);      
  62. //        if(resMsg != null){   
  63. //          System.out.println("客户端回复消息 : " + resMsg.getText() + " JMSCorrelation" + resMsg.getJMSCorrelationID());   
  64. //        }else{  
  65. //          System.out.println("等待超时!");  
  66. //        }  
  67.                   
  68.           
  69.         //异步方式接收回复  
  70.        reply.setMessageListener(this);  
  71.        while(!replyed)  
  72.            Thread.sleep(1000);  
  73.           
  74.         qconn.stop();  
  75.         sender.close();  
  76.         session.close();  
  77.         disConnection();  
  78.     }  
  79.       
  80.     public void onMessage(Message message) {  
  81.         try {  
  82.             String textMessage = ((TextMessage) message).getText();  
  83.             System.out.println("客户端回复消息 : " + textMessage+ " JMSCorrelation" + message.getJMSCorrelationID());            
  84.         } catch (JMSException e) {  
  85.             e.printStackTrace();  
  86.         }finally{  
  87.             replyed = true;   
  88.         }  
  89.     }  
  90.       
  91.     private void disConnection() throws JMSException {        
  92.         qconn.close();   
  93.     }  
  94.       
  95.       
  96.     public static void main(String[] args) throws JMSException, InterruptedException {  
  97.         MQSender ms = new MQSender();  
  98.         Scanner scan = new Scanner(System.in);  
  99.         System.out.print("输入信息:");  
  100.         ms.sendMessage(scan.next());  
  101.         System.out.print("消息发送完毕!");  
  102.     }  
  103.       
  104. }  



[java] view plaincopy
  1. import javax.jms.JMSException;  
  2. import javax.jms.Message;  
  3. import javax.jms.MessageListener;  
  4. import javax.jms.Queue;  
  5. import javax.jms.QueueConnection;  
  6. import javax.jms.QueueReceiver;  
  7. import javax.jms.QueueSession;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10.   
  11. import com.ibm.mq.jms.MQQueueConnectionFactory;  
  12.   
  13.   
  14.   
  15. public class MQRecevicer implements MessageListener{  
  16.   
  17.     MQQueueConnectionFactory mcf;  
  18.     QueueConnection qconn;  
  19.     QueueSession session;  
  20.       
  21.     final String HOSTNAME = "127.0.0.1";  
  22.     final int PORT = 1414;  
  23.     final String QUEUEMANAGER_NAME = "QM1";  
  24.     final String QUEUE_NAME = "Q1";  
  25.     final String QUEUE_NAME2 = "Q2";  
  26.     boolean replyed = false;  
  27.       
  28.     public void openConnection() throws JMSException {  
  29.         mcf = new MQQueueConnectionFactory();  
  30.         mcf.setHostName(HOSTNAME);  
  31.         mcf.setPort(PORT);  
  32.         mcf.setQueueManager(QUEUEMANAGER_NAME);  
  33.         qconn = mcf.createQueueConnection();  
  34.         qconn.start();        
  35.     }  
  36.       
  37.     public void disConnection() throws JMSException {         
  38.         qconn.close();   
  39.     }  
  40.       
  41.     public void recevicerMessage(String reply) throws JMSException, InterruptedException {  
  42.         openConnection();   
  43.         session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);  
  44.         Queue queue = session.createQueue(QUEUE_NAME);  
  45.         QueueReceiver recevier = session.createReceiver(queue);  
  46.           
  47.         //同步方式接收消息并回复  
  48. //      TextMessage textMessage = (TextMessage) recevier.receive();  
  49. //      System.out.println("接收消息 : " + textMessage.getText() + "  JMSMessage" +textMessage.getJMSMessageID());   
  50. //      Queue responseQueue = (Queue) textMessage.getJMSReplyTo();    
  51. //      if(responseQueue != null){  
  52. //          TextMessage responseMsg = session.createTextMessage();  
  53. //          responseMsg.setJMSCorrelationID(textMessage.getJMSMessageID());  
  54. //          responseMsg.setText("This message is reply from client..."+textMessage.getText());  
  55. //          session.createSender(responseQueue).send(responseMsg);   
  56. //          System.out.println("客户端回复队列:"+responseQueue.toString()+"  JMSCorrelation"+responseMsg.getJMSCorrelationID());    
  57. //      }else{  
  58. //          System.out.println("服务端回复队列为空");    
  59. //      }  
  60.           
  61.         //异步方式接收消息并回复  
  62.         recevier.setMessageListener(this);  
  63.         while(!replyed)  
  64.             Thread.sleep(1000);  
  65.            
  66.         qconn.stop();  
  67.         recevier.close();  
  68.         session.close();  
  69.         disConnection();  
  70.     }  
  71.       
  72.     public void onMessage(Message message) {  
  73.         try {  
  74.             String textMessage = ((TextMessage) message).getText();  
  75.             System.out.println("接收消息 : " + textMessage + "  JMSMessage" +message.getJMSMessageID());   
  76.             Queue responseQueue = (Queue) message.getJMSReplyTo();    
  77.             if(responseQueue != null){  
  78.                 TextMessage responseMsg = session.createTextMessage();  
  79.                 responseMsg.setJMSCorrelationID(message.getJMSMessageID());  
  80.                 responseMsg.setText("This message is reply from client:"+textMessage);  
  81.                 session.createSender(responseQueue).send(responseMsg);   
  82.                 System.out.println("客户端回复队列:"+responseQueue+"  JMSCorrelation"+responseMsg.getJMSCorrelationID());    
  83.             }else{  
  84.                 System.out.println("服务端回复队列为空");    
  85.             }  
  86.               
  87.         } catch (JMSException e) {  
  88.             e.printStackTrace();  
  89.         }finally{  
  90.             replyed = true;  
  91.         }  
  92.     }  
  93.       
  94.     public static void main(String[] args) throws JMSException, InterruptedException {  
  95.         MQRecevicer mr = new MQRecevicer();  
  96.         System.out.println("正在接收消息...");  
  97.         mr.recevicerMessage("消息已经收到,这是接收端的回复!");  
  98.         System.out.println("消息接收完毕!");  
  99.     }  

0 0
原创粉丝点击