官网:http://activemq.apache.org/ 百度网盘地址: 连接:https://pan.baidu.com/s/1A55X-vchhsaxaoaIXDUw8g 提取码:qby6 复制这段内容后打开百度网盘手机App,操做更方便哦
进入官网,向下滑动到这个位置java
点击下载最新windows版apache
将下载好的压缩文件,根据本身的需求放到指定目录,而后解压, 解压后到apache-activemq-5.15.12\bin\win64目录 启动activemq.bat 文件
访问:http://localhost:8161 点击 Manage ActiveMQ broker,点击去下面标识的便可看到
帐号和密码都是admin http://localhost:8161/admin/
登陆成功,看到以下页面
ActiveMQ使用的是标准生产者和消费者模型windows
1. Queue队列(P2P消息模型),生产者生产了一个消息,只能由一个消费者进行消费。如给微信好友发消息。 2. Topic主题/广播(Pub/Sub消息模型),生产者生产了一个消息,能够由多个消费者进行消费。如微信公众号给粉丝发消息。
JMS和ActiveMQ的对应微信
JMS消息模型 | P2P模式 | pub/sub模式 |
---|---|---|
ActiveMQ消息 | Queue队列 | Topic队列 |
特色 | 一对一,一我的发送,只容许一我的接收 | 一对多,一我的发送, 容许多我的接收 |
发送的人: 生产者 接收的人: 消费者
简单的截几张建立时的图
<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.0</version> </dependency> </dependencies>
若是本身仓库没有依赖, 导入后会本身下载, 稍等便可session
使用JMS原生API编写测试类, 小消息中间件写入消息的开发步骤以下:负载均衡
1. 建立链接工厂 2. 从链接工厂中获取链接 3. 启动链接 4. 获取会话 5. 建立Queue队列 6. 建立生产者 7. 建立消息 8. 发送消息 9. 提交请求 10. 关闭各类资源
package com.manlu.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * @author 漫路h * 生成者发送消息 */ public class ActiveMQProducter { public static void main(String[] args) throws Exception { // 链接工厂 // 使用默认用户名、密码、路径 // 由于: 底层实现: final String defaultURL = "tcp://"+DEFAULT_BROKER_HOST+ ":" + DEFAULT_BROKER_PORT; // 因此: 路径 tcp://host:61616 // 1. 建立链接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); // 2. 建立链接 Connection connection = connectionFactory.createConnection(); // 3. 打开链接 connection.start(); // 4. 建立会话 //第一个参数: 是否开启事务 //第二个参数: 消息是否自动确认 Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); //建立队列 Queue queue = session.createQueue("hello"); // 5. 建立生产者 MessageProducer producer = session.createProducer(queue); // 6. 建立消息 TextMessage message = session.createTextMessage("hi i am manlu"); // 7. 发送消息 producer.send(message); // 8. 关闭资源 session.commit(); producer.close(); session.close(); connection.close(); System.out.println("消息生成成功"); } }
默认tcp链接activeMQ端口 61616 !!maven
使用JMS原生API编写测试类,向消息中间件消费消息的开发步骤:tcp
1. 建立连接工厂 2. 建立连接 3. 启动连接 4. 获取会话 5. 建立队列 6. 建立消费者 7. 消费消息 8. 提交 9. 关闭资源
package com.manlu.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * @author manlu * 使用MessageConsumer完成消费 */ public class ActiveMQConsumer { public static void main(String[] args) throws Exception { // 1.建立链接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); // 2.建立链接 Connection connection = connectionFactory.createConnection(); // 3.开启链接 connection.start(); // 4.建立会话 /* * 第一个参数,是否使用事务 * 若是设置true,操做消息队列后, 必须使用 session.commit(); * 若是设置false, 操做消息队列后, 不使用 session.commit(); */ Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 5.建立队列 Queue queue = session.createQueue("hello"); // 6.建立消费者 MessageConsumer consumer = session.createConsumer(queue); while (true){ //失效时间, 若是10秒内没有收到新的消息,说明没有消息存在,此时能够退出当前循环 TextMessage message = (TextMessage) consumer.receive(10000); if (message!=null) { System.out.println(message.getText()); }else{ break; } } // 7.关闭链接 session.commit(); session.close(); connection.close(); System.out.println("消费结束"); } }
package com.manlu.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** * @author 漫路 * 监听器消费消息 * 重复测试生成和消费的过程。实现一边生成,一边消费的系统 */ public class ActiveMQMonitorConsumer { public static void main(String[] args) throws Exception { // 1.建立链接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); // 2.建立链接 Connection connection = connectionFactory.createConnection(); // 3.开启链接 connection.start(); // 4.建立会话 /* * 第一个参数,是否使用事务 * 若是设置true,操做消息队列后, 必须使用 session.commit(); * 若是设置false, 操做消息队列后, 不使用 session.commit(); */ Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 5.建立队列 Queue queue = session.createQueue("hello"); // 6.建立消费者 MessageConsumer messageConsumer = session.createConsumer(queue); messageConsumer.setMessageListener(new MessageListener() { //每次接受消息,自动调用 onMessage @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println(textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //咱们不让程序结束,由于若是结束, 监听就结束了 while (true){ //目的: 不让程序死掉 } } }
P2P消息模型中的多消费者模式,得出结论以下: - 一个消息只能被一个消费者消费, 不可重复消费 - 多个消费者均分消息(负载均衡策略) - 当消费者在消费某个消息的时候, mq必定要等到它的成功回执, 才会分发下一个消息
注意: 测试的时候必定要先启动消费者,再启动生产者ide
Topic:主题模式、广播模式、pus/sub模式测试
// 1. 建立链接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); // 2. 建立链接 Connection connection = connectionFactory.createConnection(); // 3. 打开链接 connection.start(); // 4. 建立会话 //第一个参数: 是否开启事务 //第二个参数: 消息是否自动确认 Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 5.建立Topic主题模式 Topic topic = session.createTopic("manlu123"); // 6.建立生产者 MessageProducer producer = session.createProducer(topic);
相同点: 1. 都只有一个生产者 2. 均可以有多个消费者 不一样点: 1. queue队列模式, 一个消息只能别一个消费者消费, 不能重复消费 当消费者消费某个消息的时候,必定要获得这个消息被成功消费的回执,才会分发下一个消息 queue入队以后,不管等待多久, 消息都会一直等待消费者来处理 2. topic广播模式, 一个消息能够被多个消费者消费 这个消息不管被成功消费与否,都无所谓 topic要求时间要一致, 我正好发, 你正好收