ActiveMQ队列消息和群发消息Java代码实现

一、介绍
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
二、下载
下面是官网下载连接,可以下载最新版本,安装非常简单,解压后就可以直接使用,本地访问是http://localhost:8161/admin,会有登录用户名和密码,默认都是admin
ActiveMQ官网下载链接: http://activemq.apache.org/download.html
三、Java代码实现消息队列
(1).实现POT模型——主动消费
①消息队列生产者的Java代码实现

package ActiveMQTest;


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

import org.apache.activemq.ActiveMQConnectionFactory;

public class PTPProducer {
	
	public static void sendMessage(String data) {
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息发送者
		MessageProducer messageProducer = null;
		//消息对象
		Message message = null;
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
			//创建目的地
			destination = session.createQueue("testActiveMQ");
			
			//确定消息的发送者
			messageProducer = session.createProducer(destination);
			
			//创建文本消息对象,作为具体数据的载体
			message = session.createTextMessage(data);
			
			//发送消息到目的地
			messageProducer.send(message);
//			System.out.println("消息发送成功");
			
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				if(messageProducer != null) {
					messageProducer.close();
				}
				if(session != null) {
					session.close();
				}
				if(connection != null) {
					connection.close();
				}
				
			}catch(Exception e) {
				e.printStackTrace();
			}
			
		}
		
	}
	
	public static void main(String[] args) {
		
		sendMessage("csdnTest");
		
	}
}

②消息队列消费者Java代码实现

package ActiveMQTest;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class PTPConsumer {
	
	public static String reciveMessage() {
		String result = "";
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息消费者
		MessageConsumer messageConsumer = null;
		//消息对象
		Message message = null;
		
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
			//创建目的地
			destination = session.createQueue("testActiveMQ");
			//创建消费者对象,指定目的地
			messageConsumer = session.createConsumer(destination);
			//接收消息
			message = messageConsumer.receive();
			//处理文本消息
			
//			//确认消息已经接收
			message.acknowledge();
			
			result = ((TextMessage)message).getText();
		} catch (JMSException e) {
			
			e.printStackTrace();
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println(reciveMessage());
	}

}

(2)PTP模型——观察者消费
①消息队列生产者的Java代码实现

package ActiveMQTest;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class ProducerListener {
	public static void sendMessage(String data) {
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息发送者
		MessageProducer messageProducer = null;
		//消息对象
		Message message = null;
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
			//创建目的地
			destination = session.createQueue("testActiveMQ");
			
			//确定消息的发送者
			messageProducer = session.createProducer(destination);
			
			//创建文本消息对象,作为具体数据的载体
			message = session.createObjectMessage(data);
			
			//发送消息到目的地
			messageProducer.send(message);
//			System.out.println("消息发送成功");
			
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				if(messageProducer != null) {
					messageProducer.close();
				}
				if(session != null) {
					session.close();
				}
				if(connection != null) {
					connection.close();
				}
				
			}catch(Exception e) {
				e.printStackTrace();
			}
			
		}
		
	}
	public static void main(String[] args) {
		for(int i = 0; i < 100; i++) {
			sendMessage(i + "");
		}
		
	}
}

②消息队列消费者Java代码实现

package ActiveMQTest;

import java.io.IOException;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ConsumerListener {
	
	public  void reciveMessage() {
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息消费者
		MessageConsumer messageConsumer = null;
		
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
			//创建目的地
			destination = session.createQueue("testActiveMQ");
			//创建消费者对象,指定目的地
			messageConsumer = session.createConsumer(destination);
			
			//注册监听器,一旦监听器出发后,就会自动接收消息
			messageConsumer.setMessageListener(new MessageListener() {
				/**
				 * 监听器一旦注册,就永久有效
				 * 监听器可以注册多个
				 */
				public void onMessage(Message message) {
					try {
						//acknowledge是消息确认的方法,代表consumer接收到消息,接收消息后ActiveMQ会自动删除
						message.acknowledge();
						ObjectMessage objectMessage = (ObjectMessage)message;
						Object data = objectMessage.getObject();
						System.out.println(data);
						
					} catch (JMSException e) {
						e.printStackTrace();
					}
					
				}
			});
			
			//阻塞当前代码,代表Listener代码未结束,如果代码结束,监听器会自动关闭
			System.in.read();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public static void main(String[] args) {
		ConsumerListener consumerListener = new ConsumerListener();
		consumerListener.reciveMessage();
	}
}

(3).PUB&SUB模型——发布订阅模式
①生产者(发布者)的Java代码实现

package ActiveMQTest;


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

import org.apache.activemq.ActiveMQConnectionFactory;

public class TopicProducer {
	
	public static void sendMessage(String data) {
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息发送者
		MessageProducer messageProducer = null;
		//消息对象
		Message message = null;
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
			//创建目的地
			destination = session.createTopic("topicTest");
			
			//确定消息的发送者
			messageProducer = session.createProducer(destination);
			
			//创建文本消息对象,作为具体数据的载体
			message = session.createTextMessage(data);
			
			//发送消息到目的地
			messageProducer.send(message);
//			System.out.println("消息发送成功");
			
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				if(messageProducer != null) {
					messageProducer.close();
				}
				if(session != null) {
					session.close();
				}
				if(connection != null) {
					connection.close();
				}
				
			}catch(Exception e) {
				e.printStackTrace();
			}
			
		}
		
	}
	
	public static void main(String[] args) {
		sendMessage("testTopic");
		
	}
}

②消费者(订阅者)Java代码实现

package ActiveMQTest;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class TopicConsumer {
	
	public static String reciveMessage() {
		String result = "";
		//连接工厂
		ConnectionFactory connectionFactory = null;
		//连接
		Connection connection = null;
		//目的地
		Destination destination = null;
		//会话
		Session session = null;
		//消息消费者
		MessageConsumer messageConsumer = null;
		//消息对象
		Message message = null;
		
		
		try {
			//创建连接工厂,连接ActiveMQ服务的工厂
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://127.0.0.1:61616");
			//通过工厂创建连接对象
			connection = connectionFactory.createConnection();
			//启动连接
			connection.start();
			/**
			 * 通过连接对象,创建会话对象,绑定目的地
			 * 有两个参数,第一个是是否支持事务,一般是false,第二个是如何确认消息的处理
			 *	session = connection.createSession 或者 Session.AUTO_ACKNOWLEDGE
			 */
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//创建目的地
			destination = session.createTopic("topicTest");
			//创建消费者对象,指定目的地
			messageConsumer = session.createConsumer(destination);
			//接收消息
			message = messageConsumer.receive();
			//处理文本消息
			result = ((TextMessage)message).getText();
		} catch (JMSException e) {
			
			e.printStackTrace();
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println(reciveMessage());
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值