JMS之ActiveMQ--点对点消息实现

1.新建javaSE工程--引入jar包


2.开始写代码

2.1 创建消息生产者

/**  
* <p>Title: MessageProducer.java</p>  
* <p>Description: </p>   
* @author lihongjie  
* @date 2018年7月15日  
* @version 1.0  
*/  
package com.zit.mq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**  
* <p>Title: MessageProducer</p>  
* <p>Description:消息生产者 </p>  
* @author lihongjie  
* @date 2018年7月15日  
*/
public class MyMessageProducer { 
	// 默认的连接用户名
	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
	// 默认的连接密码
	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
	// 默认的连接地址
	private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
	// 发送的消息数量
	private static final int SENDNUM=10; 
	
	public static void main(String[] args) {
		//连接工厂
		ConnectionFactory connectionFactory; 
		//连接
		Connection connection = null;
		
		Session session ;// 会话 接受或者发送消息的线程
		Destination destination ;//消息的目的地
		MessageProducer messageProducer ;//消息生产者
		
		//实例化连接工厂
		connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);
		
		try {
			//通过连接工厂获取连接
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			//创建消息队列
			destination = session.createQueue("消息队列1");
			//创建消息生产者
			messageProducer = session.createProducer(destination);
			//发送消息
			sendMessage(session, messageProducer);
			session.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		}
		//关闭资源
		finally {
			if(null != connection)
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
		}
		
		
	}
	/**
	 * 
	 * <p>Title: sendMessage</p>  
	 * <p>Description: 发送消息</p>  
	 * @param session
	 * @param messageProducer
	 */
	public static void sendMessage(Session session, MessageProducer messageProducer) {
		try {
			for (int i = 0; i < SENDNUM; i++) {
				TextMessage textMessage = session.createTextMessage("ActiveMQ发送的第"+i+"条消息!");
				System.out.println("发送消息"+i+"条!");
				messageProducer.send(textMessage);
			}
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}

2.2 创建消息消费者--第一种方式

/**  
* <p>Title: MessageProducer.java</p>  
* <p>Description: </p>   
* @author lihongjie  
* @date 2018年7月15日  
* @version 1.0  
*/  
package com.zit.mq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**  
* <p>Title: MessageProducer</p>  
* <p>Description:消息消费者 </p>  
* @author lihongjie  
* @date 2018年7月15日  
*/
public class MyMessageConsumer { 
	// 默认的连接用户名
	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
	// 默认的连接密码
	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
	// 默认的连接地址
	private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
	// 发送的消息数量
	private static final int SENDNUM=10; 
	
	public static void main(String[] args) {
		//连接工厂
		ConnectionFactory connectionFactory; 
		//连接
		Connection connection = null;
		Session session ;// 会话 接受或者发送消息的线程
		Destination destination ;//消息的目的地
		MessageConsumer messageConsumer;//消息消费者
		
		//实例化连接工厂
		connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);
		
		try {
			//通过连接工厂获取连接
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			//创建session
			session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
			//创建消息队列
			destination = session.createQueue("消息队列1");
			//创建消息消费者
			messageConsumer = session.createConsumer(destination);
			//接收消息
			while (true) {
				TextMessage textMessage = (TextMessage)messageConsumer.receive(100000);
				
				if(null != textMessage) {
					System.out.println("收到的消息是:"+textMessage);
				}else {
					continue;
				}
				
			}
			
		} catch (JMSException e) {
			e.printStackTrace();
		}
		//关闭资源
		finally {
			if(null != connection)
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
		}
		
		
	}
}

2.3 创建消息消费者--第二种方式(优化)--监听

2.3.1创建监听

/**  
* <p>Title: MyListener.java</p>  
* <p>Description: </p>   
* @author lihongjie  
* @date 2018年7月15日  
* @version 1.0  
*/  
package com.zit.mq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**  
* <p>Title: MyListener</p>  
* <p>Description:消息监听 </p>  
* @author lihongjie  
* @date 2018年7月15日  
*/
public class MyListener implements MessageListener {

	/* (non-Javadoc)  
	 * <p>Title: onMessage</p>  
	 * <p>Description: </p>  
	 * @param message  
	 * @see javax.jms.MessageListener#onMessage(javax.jms.Message)  
	 */
	@Override
	public void onMessage(Message message) {
		
		try {
			System.out.println("通过监听,监听收到的消息:"+((TextMessage)message).getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}

	}

}

2.3.2 创建消费者--通过监听的方式进行消费

/**  
* <p>Title: MessageProducer.java</p>  
* <p>Description: </p>   
* @author lihongjie  
* @date 2018年7月15日  
* @version 1.0  
*/  
package com.zit.mq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**  
* <p>Title: MessageProducer</p>  
* <p>Description:消息消费者 --优化</p>  
* @author lihongjie  
* @date 2018年7月15日  
*/
public class MyMessageConsumer2 { 
	// 默认的连接用户名
	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
	// 默认的连接密码
	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
	// 默认的连接地址
	private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
	// 发送的消息数量
	private static final int SENDNUM=10; 
	
	public static void main(String[] args) {
		//连接工厂
		ConnectionFactory connectionFactory; 
		//连接
		Connection connection = null;
		Session session ;// 会话 接受或者发送消息的线程
		Destination destination ;//消息的目的地
		MessageConsumer messageConsumer;//消息消费者
		
		//实例化连接工厂
		connectionFactory = new ActiveMQConnectionFactory(MyMessageConsumer2.USERNAME, MyMessageConsumer2.PASSWORD, MyMessageConsumer2.BROKEURL);
		
		try {
			//通过连接工厂获取连接
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			//创建session
			session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
			//创建消息队列
			destination = session.createQueue("消息队列1");
			//创建消息消费者
			messageConsumer = session.createConsumer(destination);
			//接收消息--注册消息监听
			messageConsumer.setMessageListener(new MyListener());
			/*TextMessage textMessage = (TextMessage)messageConsumer.receive(100000);
			System.out.println("第二个消费者,收到的消息是:"+textMessage);*/
		} catch (JMSException e) {
			e.printStackTrace();
		}
		
	}
}

2.4 查询浏览器界面






猜你喜欢

转载自blog.csdn.net/qq_37306041/article/details/81051114