ActiveMQ5.15 - 入门 demo

第一步:先下载activeMQ http://activemq.apache.org/ 我下载的是5.12,最新

导入pom依赖:

<dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.15.3</version>
 </dependency>

第二部:解压文件apache-activemq-5.15.3-bin.zip 后启动apache-activemq-5.15.3\bin\win64\activemq.bat

第三部:访问http://localhost:8161/admin/  提示登陆:输入用户:admin,密码:admin ,查看你的消息

接下来说重点,生产者producer和消费者consumer,producer生成消息放到指定的队列中,consumer从指定的队列中消费消息。

代码:

生产者:

package com.test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

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

public class Producer {
	static String NAME = ActiveMQConnection.DEFAULT_USER;//admin
	static String PSWD = ActiveMQConnection.DEFAULT_PASSWORD;//admin
	static String URL = "tcp://localhost:61616";
	
	static ConnectionFactory connectionFactory = null;
	static Connection connection = null;
	static Session session;
	static Queue queue;
	static MessageProducer producer;
	static Integer index = 0;

	public static void main(String[] args) {
	    
        //链接工厂,用来创建链接
		connectionFactory = new ActiveMQConnectionFactory(Producer.NAME, Producer.PSWD, Producer.URL);
		
		try {
			//创建链接
			connection = connectionFactory.createConnection();
			//启动链接
			connection.start();
			//创建会话
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			//创建列队
			queue = session.createQueue("cmjQueue");
			
			//创建生产者,将信息生产到queue中
			producer = session.createProducer(queue);
			//设置生成信息的策略.不序列化,实际看自己的项目业务情况而定,这里只是学习
			producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			while(true){
				index++;
				//创建信息
				MapMessage mapMessage = session.createMapMessage();
				mapMessage.setString("name", "曹明杰"+index);
				mapMessage.setString("age", "23");
				//发送信息
				System.out.println("消息已发送");
				producer.send(mapMessage);
				Thread.sleep(3000);
				session.commit();//提交,信息真正的发送
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			try {
				if (null != connection)	 connection.close(); //关闭  
			 } catch (Throwable ignore){
				 
			 }
		}
				

	}

}


消费者:

package com.test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;


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

public class Consumer {
	static String NAME = ActiveMQConnection.DEFAULT_USER;
	static String PSWD = ActiveMQConnection.DEFAULT_PASSWORD;
	static String URL = "tcp://localhost:61616";
	
	static ConnectionFactory connectionFactory = null;
	static Connection connection = null;
	static Session session;
	static Queue queue;
	static MessageConsumer consumer;

	public static void main(String[] args) {
		//创建链接
		connectionFactory = new ActiveMQConnectionFactory(NAME, PSWD, URL);
		try {
			 //创建链接
			connection = connectionFactory.createConnection();
			//启动
			connection.start();
			//创建会话
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			//创建目的地即queue 
			queue = session.createQueue("cmjQueue");
			//创建消费者
			consumer = session.createConsumer(queue);
			System.out.println("开始消费");
			while(true){
				//等待3秒向消息队列中查看是否有消息,有就开始消费
				 MapMessage receive = (MapMessage)consumer.receive(3000);
				
				 System.out.println("消费信息为:");
				 if(receive!=null){
					System.out.println(receive.getString("name"));
					System.out.println(receive.getString("age"));
				 }else{
					
				 }
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			 try { 
				  if (null != connection) connection.close();
		     } catch (Throwable ignore){}
		}

	}

}

我们可以多起几个线程进行消费。并查看console输出。

总结:

         queue是一对一的,即一个消息只能被一个consumer消费,但是一个queue可以关联好多个消费者,这时消费者也要排队,先来者进行消费然后是下一个消费者。queue中的消息被consumer申请并消费(自动拉取),息不能被重复消费,

         topic是广播模式。即一对多,多个consumer同时进行消费,不过是topic主动的推送给消费者(自动推送),就好像我们订阅的新闻信息,自动推送给用户查看,信息可以重复消费。即一个消息发送给多个consumer。
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值