ActiveMQ demo 测试
1.环境搭建
单节点windows 系统 版本apache-activemq-5.11.1 ,运行D:\apache-activemq-5.11.1\bin\win64\activemq.bat 即可
控制台界面 localhost:8161/admin 登陆 ,admin/admin123

引入all jar包

生产者:
package test.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Sender { public static void main(String[] args)throws Exception { //active.xml 设置用户名密码</borker> ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua","tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); //开启连接 connection.start(); //1.事务控制,2.自动签收(最好采用手动签收方式)二者都是创建一个新的线程去给队列确认消息消费完毕 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); //设置目的地为queue1队列 Destination destination = session.createQueue("queue1"); MessageProducer messageProducer = session.createProducer(null); for(int i =1;i<=5;i++){ TextMessage textMessage = session.createTextMessage(); textMessage.setText("我是消息内容,id为:"+i); //1.消息目的地2.消息内容3.是否持久化4.优先级(大量消息概率上满足,0-4:普通,5-9:加急)5.消息存活时间(毫秒级),超时出列 //消息顺序消费机制,后续讨论 messageProducer.send(destination, textMessage, DeliveryMode.NON_PERSISTENT, i, 1000*60); System.out.println("生产者:"+textMessage.getText()); }
//关闭连接会相应关闭session、producer、consumer if(connection!=null){ connection.close(); } } }
启动后,会看到控制台入待处理消息,入队消息,出队消息情况
消费者:
package test.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Receiver { public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua","tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("queue1"); MessageConsumer messageConsumer = session.createConsumer(destination);
//循环监听 while(true){
//receive 阻塞在这里 TextMessage msg = (TextMessage)messageConsumer.receive(); if(msg==null) break; System.out.println("收到内容:"+msg.getText()); } if(connection!=null){ connection.close(); } } }
执行循环监听消费,消费完了,出队消息有值了。

这是简单的P2P模式,还有发布订阅模式(广播方式)
感谢阅读博客,欢迎向博主讨论问题。
浙公网安备 33010602011771号