ActiveMQ基础(重点篇)

1.ActiveMQ简介

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,完全支持JMS1.1和J2EE 1.4规范,java语言开发的。

主要特点:多种语言编写客户端(java、c、c++、php),对spring支持(易整合),通过jdbc和journal提供高速的消息持久化,客户端-服务器,点对点,支持ajax。

 

2>ActiveMQ的消息形式

一种是点对点的,即一个生产者和一个消费者一一对应,消息默认就是持久化的

另一种是发布/订阅模式,即一个生产者产生消息并发送后,可以有多个消费者接收,消息一次发送不持久化

 

官网:http://activemq.apache.org/

 

2.ActiveMQ的安装(Linux)

1>安装环境:需要jdk、生产环境为Linux系统

2>把ActiveMQ的压缩包.tar.gz上传到Linux系统

3>tar -xvf 文件名.tar.gz命令解压缩

4>进入bin目录下的activemq启动

5>启动:[root@localhost bin]# ./activemq start

6>关闭:[root@localhost bin]# ./activemq stop

7>查看状态:[root@localhost bin]# ./activemq status

注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建议使用5.11.2

进入管理后台:http://192.168.25.131:8161

登录:用户名/密码(admin/admin)

 

3.ActiveMQ的使用

使用前需要导入5.11.2版本的jar包

1>Queue模式(点对点)

/**
 * 消息队列,ActiveMQ的单元测试
 * @author SpongBob
 *
 */
public class TestActiveMQ {

	/**
	 * Queue:点到点的形式发送消息
	 * @throws Exception
	 */
	@Test
	public void testQueueProducer() throws Exception{
		//第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.131:61616");
		//第二步:使用ConnectionFactory对象创建一个Connection对象。
		Connection connection = connectionFactory.createConnection();
		//第三步:开启连接,调用Connection对象的start方法。
		connection.start();
		//第四步:使用Connection对象创建一个Session对象。
		//第一个参数:是否开启失误。true开启事务,第二个参数就意义一版不开启事务
		//第二个参数:应答模式,自动应答或手动应答(CLIENT_ACKNOWLEDGE),一般为自动应答(AUTO_ACKNOWLEDGE)
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session对象创建一个Destination对象(topic、queue),此处创建一个Queue对象。
		Queue queue = session.createQueue("test-queue");
		//第六步:使用Session对象创建一个Producer对象。
		MessageProducer producer = session.createProducer(queue);
		//第七步:创建一个Message对象,创建一个TextMessage对象。
		TextMessage textMessage = session.createTextMessage("hello queue2");
		//第八步:使用Producer对象发送消息。
		producer.send(textMessage);
		//第九步:关闭资源。
		producer.close();
		session.close();
		connection.close();
	}
	
	/**
	 * Queue:点到点接受消息
	 */
	@Test
	public void testQueueConsumer() throws Exception{
		//第一步:创建一个ConnectionFactory对象。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.131:61616");
		//第二步:从ConnectionFactory对象中获得一个Connection对象。
		Connection connection = connectionFactory.createConnection();
		//第三步:开启连接。调用Connection对象的start方法。
		connection.start();
		//第四步:使用Connection对象创建一个Session对象。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session对象创建一个Destination对象。和发送端保持一致queue,并且队列的名称一致。
		Queue queue = session.createQueue("test-queue");
		//第六步:使用Session对象创建一个Consumer对象。
		MessageConsumer consumer = session.createConsumer(queue);
		//第七步:接收消息。
		consumer.setMessageListener(new MessageListener() {
			@Override
			public void onMessage(Message message) {
				//打印结果
				TextMessage textMessage = (TextMessage) message;
				String text;
				//第八步:打印消息。
				try {
					text = textMessage.getText();
					System.out.println(text);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		//一直保持该线程开启,等待接受消息
		System.out.println("等待接受消息:");
		System.in.read();
		//第九步:关闭资源
		consumer.close();
		session.close();
		connection.close();
	}

2>topic模式(发布/订阅)

	/**
	 * Topic:发布/订阅格式,--发布消息
	 */
	@Test
	public void testTopicProducer() throws Exception{
		//第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.131:61616");
		//第二步:使用ConnectionFactory对象创建一个Connection对象。
		Connection connection = connectionFactory.createConnection();
		//第三步:开启连接,调用Connection对象的start方法。
		connection.start();
		//第四步:使用Connection对象创建一个Session对象。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session对象创建一个Destination对象(topic、queue),此处创建一个Topic对象。
		Topic topic = session.createTopic("test-topic");
		//第六步:使用Session对象创建一个Producer对象。
		MessageProducer producer = session.createProducer(topic);
		//第七步:创建一个Message对象,创建一个TextMessage对象。
		TextMessage textMessage = session.createTextMessage("hello topic");
		//第八步:使用Producer对象发送消息。
		producer.send(textMessage);
		//第九步:关闭资源。
		producer.close();
		session.close();
		connection.close();
	}
	
	/**
	 * Topic:发布/订阅格式,--接收消息
	 * @throws Exception 
	 */
	@Test
	public void testTopicConsumer() throws Exception{
		//第一步:创建一个ConnectionFactory对象。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.131:61616");
		//第二步:从ConnectionFactory对象中获得一个Connection对象。
		Connection connection = connectionFactory.createConnection();
		//第三步:开启连接。调用Connection对象的start方法。
		connection.start();
		//第四步:使用Connection对象创建一个Session对象。
		Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session对象创建一个Destination对象。和发送端保持一致topic,并且话题的名称一致。
		Topic topic = session.createTopic("test-topic");
		//第六步:使用Session对象创建一个Consumer对象。
		MessageConsumer consumer = session.createConsumer(topic);
		//第七步:接收消息。
		consumer.setMessageListener(new MessageListener() {
			//第八步:打印消息。
			String text;
			public void onMessage(Message message) {
				TextMessage textMessage = (TextMessage) message;
				try {
					text = textMessage.getText();
					System.out.println(text);
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		System.out.println("topic消费者1启动。。。。");
		//等待接收消息
		System.in.read();
		//第九步:关闭资源
		consumer.close();
		connection.close();
		session.close();
	}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值