JMS五种消息的发送/接收的例子

1、消息发送

Java代码   收藏代码
  1. //连接工厂  
  2. ConnectionFactory connFactory = new ActiveMQConnectionFactory(  
  3.         ActiveMQConnection.DEFAULT_USER,  
  4.         ActiveMQConnection.DEFAULT_PASSWORD,  
  5.         "tcp://localhost:61616");  
  6.   
  7. //连接到JMS提供者  
  8. Connection conn = connFactory.createConnection();  
  9. conn.start();  
  10.   
  11. //事务性会话,自动确认消息  
  12. Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);  
  13.   
  14. //消息的目的地  
  15. Destination destination = session.createQueue("queue.hello");  
  16.   
  17. //消息生产者  
  18. MessageProducer producer = session.createProducer(destination);  
  19. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //不持久化  
  20.   
  21.   
  22. //文本消息  
  23. TextMessage textMessage = session.createTextMessage("文本消息");  
  24. producer.send(textMessage);  
  25.   
  26. //键值对消息  
  27. MapMessage mapMessage = session.createMapMessage();  
  28. mapMessage.setLong("age"new Long(32));  
  29. mapMessage.setDouble("sarray"new Double(5867.15));  
  30. mapMessage.setString("username""键值对消息");  
  31. producer.send(mapMessage);  
  32.   
  33. //流消息  
  34. StreamMessage streamMessage = session.createStreamMessage();  
  35. streamMessage.writeString("streamMessage流消息");  
  36. streamMessage.writeLong(55);  
  37. producer.send(streamMessage);  
  38.   
  39. //字节消息  
  40. String s = "BytesMessage字节消息";  
  41. BytesMessage bytesMessage = session.createBytesMessage();  
  42. bytesMessage.writeBytes(s.getBytes());  
  43. producer.send(bytesMessage);  
  44.   
  45. //对象消息  
  46. User user = new User("cjm""对象消息"); //User对象必须实现Serializable接口  
  47. ObjectMessage objectMessage = session.createObjectMessage();  
  48. objectMessage.setObject(user);  
  49. producer.send(objectMessage);  
  50.   
  51.   
  52. session.commit(); //在事务性会话中,只有commit之后,消息才会真正到达目的地  
  53. producer.close();  
  54. session.close();  
  55. conn.close();  

 2、消息接收:通过消息监听器的方式接收消息

Java代码   收藏代码
  1. public class Receiver implements MessageListener{  
  2.     private boolean stop = false;  
  3.       
  4.     public void execute() throws Exception {  
  5.         //连接工厂  
  6.         ConnectionFactory connFactory = new ActiveMQConnectionFactory(  
  7.                 ActiveMQConnection.DEFAULT_USER,  
  8.                 ActiveMQConnection.DEFAULT_PASSWORD,  
  9.                 "tcp://localhost:61616");  
  10.           
  11.         //连接到JMS提供者  
  12.         Connection conn = connFactory.createConnection();  
  13.         conn.start();  
  14.           
  15.         //事务性会话,自动确认消息  
  16.         Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);  
  17.           
  18.         //消息的来源地  
  19.         Destination destination = session.createQueue("queue.hello");  
  20.           
  21.         //消息消费者  
  22.         MessageConsumer consumer = session.createConsumer(destination);  
  23.         consumer.setMessageListener(this);  
  24.           
  25.         //等待接收消息  
  26.         while(!stop){  
  27.             Thread.sleep(5000);  
  28.         }  
  29.           
  30.         session.commit();  
  31.           
  32.         consumer.close();  
  33.         session.close();  
  34.         conn.close();  
  35.     }  
  36.   
  37.     public void onMessage(Message m) {  
  38.         try{  
  39.             if(m instanceof TextMessage){ //接收文本消息  
  40.                 TextMessage message = (TextMessage)m;  
  41.                 System.out.println(message.getText());  
  42.             }else if(m instanceof MapMessage){ //接收键值对消息  
  43.                 MapMessage message = (MapMessage)m;  
  44.                 System.out.println(message.getLong("age"));  
  45.                 System.out.println(message.getDouble("sarray"));  
  46.                 System.out.println(message.getString("username"));  
  47.             }else if(m instanceof StreamMessage){ //接收流消息  
  48.                 StreamMessage message = (StreamMessage)m;  
  49.                 System.out.println(message.readString());  
  50.                 System.out.println(message.readLong());  
  51.             }else if(m instanceof BytesMessage){ //接收字节消息  
  52.                 byte[] b = new byte[1024];  
  53.                 int len = -1;  
  54.                 BytesMessage message = (BytesMessage)m;  
  55.                 while((len=message.readBytes(b))!=-1){  
  56.                     System.out.println(new String(b, 0, len));  
  57.                 }  
  58.             }else if(m instanceof ObjectMessage){ //接收对象消息  
  59.                 ObjectMessage message = (ObjectMessage)m;  
  60.                 User user = (User)message.getObject();  
  61.                 System.out.println(user.getUsername() + " _ " + user.getPassword());  
  62.             }else{  
  63.                 System.out.println(m);  
  64.             }  
  65.               
  66.             stop = true;  
  67.         }catch(JMSException e){  
  68.             stop = true;  
  69.             e.printStackTrace();  
  70.         }  
  71.     }  
  72. }  

猜你喜欢

转载自ytqit.iteye.com/blog/2344843