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();  
//连接工厂
ConnectionFactory connFactory = new ActiveMQConnectionFactory(
		ActiveMQConnection.DEFAULT_USER,
		ActiveMQConnection.DEFAULT_PASSWORD,
		"tcp://localhost:61616");

//连接到JMS提供者
Connection conn = connFactory.createConnection();
conn.start();

//事务性会话,自动确认消息
Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);

//消息的目的地
Destination destination = session.createQueue("queue.hello");

//消息生产者
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //不持久化


//文本消息
TextMessage textMessage = session.createTextMessage("文本消息");
producer.send(textMessage);

//键值对消息
MapMessage mapMessage = session.createMapMessage();
mapMessage.setLong("age", new Long(32));
mapMessage.setDouble("sarray", new Double(5867.15));
mapMessage.setString("username", "键值对消息");
producer.send(mapMessage);

//流消息
StreamMessage streamMessage = session.createStreamMessage();
streamMessage.writeString("streamMessage流消息");
streamMessage.writeLong(55);
producer.send(streamMessage);

//字节消息
String s = "BytesMessage字节消息";
BytesMessage bytesMessage = session.createBytesMessage();
bytesMessage.writeBytes(s.getBytes());
producer.send(bytesMessage);

//对象消息
User user = new User("cjm", "对象消息"); //User对象必须实现Serializable接口
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setObject(user);
producer.send(objectMessage);


session.commit(); //在事务性会话中,只有commit之后,消息才会真正到达目的地
producer.close();
session.close();
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. }  
public class Receiver implements MessageListener{
	private boolean stop = false;
	
	public void execute() throws Exception {
		//连接工厂
		ConnectionFactory connFactory = new ActiveMQConnectionFactory(
				ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD,
				"tcp://localhost:61616");
		
		//连接到JMS提供者
		Connection conn = connFactory.createConnection();
		conn.start();
		
		//事务性会话,自动确认消息
		Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
		
		//消息的来源地
		Destination destination = session.createQueue("queue.hello");
		
		//消息消费者
		MessageConsumer consumer = session.createConsumer(destination);
		consumer.setMessageListener(this);
		
		//等待接收消息
		while(!stop){
			Thread.sleep(5000);
		}
		
		session.commit();
		
		consumer.close();
		session.close();
		conn.close();
	}

	public void onMessage(Message m) {
		try{
			if(m instanceof TextMessage){ //接收文本消息
				TextMessage message = (TextMessage)m;
				System.out.println(message.getText());
			}else if(m instanceof MapMessage){ //接收键值对消息
				MapMessage message = (MapMessage)m;
				System.out.println(message.getLong("age"));
				System.out.println(message.getDouble("sarray"));
				System.out.println(message.getString("username"));
			}else if(m instanceof StreamMessage){ //接收流消息
				StreamMessage message = (StreamMessage)m;
				System.out.println(message.readString());
				System.out.println(message.readLong());
			}else if(m instanceof BytesMessage){ //接收字节消息
				byte[] b = new byte[1024];
				int len = -1;
				BytesMessage message = (BytesMessage)m;
				while((len=message.readBytes(b))!=-1){
					System.out.println(new String(b, 0, len));
				}
			}else if(m instanceof ObjectMessage){ //接收对象消息
				ObjectMessage message = (ObjectMessage)m;
				User user = (User)message.getObject();
				System.out.println(user.getUsername() + " _ " + user.getPassword());
			}else{
				System.out.println(m);
			}
			
			stop = true;
		}catch(JMSException e){
			stop = true;
			e.printStackTrace();
		}
	}
}

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值