ActiveMQ入门教程
来源:互联网 发布:搜索算法工程师 编辑:程序博客网 时间:2024/05/18 13:10
1.下载ActiveMQ
去官方网站下载:http://activemq.apache.org/
2.运行ActiveMQ
解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。
启动ActiveMQ以后,登陆:http://localhost:8161/admin/。
3.创建Eclipse项目并运行
Producter类
package com.hbk.test;import java.util.concurrent.atomic.AtomicInteger;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Queue;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Producter { // ActiveMq 的默认用户名 private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // ActiveMq 的默认登录密码 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; // ActiveMQ 的链接地址 private static final String BROKEN_URL = ActiveMQConnection.DEFAULT_BROKER_URL; AtomicInteger count = new AtomicInteger(0); // 链接工厂 ConnectionFactory connectionFactory; // 链接对象 Connection connection; // 事务管理 Session session; ThreadLocal<MessageProducer> threadLocal = new ThreadLocal<MessageProducer>(); public void init() { try { // 创建一个链接工厂 connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEN_URL); // 从工厂中创建一个链接 connection = connectionFactory.createConnection(); // 开启链接 connection.start(); // 创建一个事务(这里通过参数可以设置事务的级别) session = connection.createSession(true, Session.SESSION_TRANSACTED); } catch (JMSException e) { e.printStackTrace(); } } public void sendMessage(String disname) { try { // 创建一个消息队列 Queue queue = session.createQueue(disname); // 消息生成者 MessageProducer messageProducer = null; if (threadLocal.get() != null) { messageProducer = threadLocal.get(); } else { messageProducer = session.createProducer(queue); threadLocal.set(messageProducer); } while (true) { Thread.sleep(1000); int num = count.getAndIncrement(); // 创建一条消息 TextMessage msg = session.createTextMessage(Thread.currentThread().getName() + "productor:我是大帅哥,我现在正在生产东西!,count:" + num); System.out.println(Thread.currentThread().getName() + "productor:我是大帅哥,我现在正在生产东西!,count:" + num); // 发送消息 messageProducer.send(msg); // 提交事务 session.commit(); } } catch (Exception e) { e.printStackTrace(); } }}
Consumer类
package com.hbk.test;import java.util.concurrent.atomic.AtomicInteger;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Queue;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Consumer { // ActiveMq 的默认用户名 private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // ActiveMq 的默认登录密码 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; // ActiveMQ 的链接地址 private static final String BROKEN_URL = ActiveMQConnection.DEFAULT_BROKER_URL; AtomicInteger count = new AtomicInteger(0); // 链接工厂 ConnectionFactory connectionFactory; // 链接对象 Connection connection; // 事务管理 Session session; ThreadLocal<MessageConsumer> threadLocal = new ThreadLocal<MessageConsumer>(); public void init() { try { // 创建一个链接工厂 connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEN_URL); // 从工厂中创建一个链接 connection = connectionFactory.createConnection(); // 开启链接 connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); } catch (JMSException e) { e.printStackTrace(); } } public void getMessage(String disname) { try { Queue queue = session.createQueue(disname); MessageConsumer consumer = null; if (threadLocal.get() != null) { consumer = threadLocal.get(); } else { consumer = session.createConsumer(queue); threadLocal.set(consumer); } while (true) { Thread.sleep(1000); TextMessage msg = (TextMessage) consumer.receive(); if (msg != null) { msg.acknowledge(); System.out.println(Thread.currentThread().getName() + ": Consumer:我是消费者,我正在消费Msg" + msg.getText() + "--->" + count.getAndIncrement()); } else { break; } } } catch (Exception e) { e.printStackTrace(); } }}
测试生产者生产消息
package com.hbk.test;public class TestProcucter { public static void main(String[] args) { Producter producter = new Producter(); producter.init(); TestProcucter testMQ = new TestProcucter(); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } // Thread 1 new Thread(testMQ.new ProductorMq(producter)).start(); // Thread 2 new Thread(testMQ.new ProductorMq(producter)).start(); // Thread 3 new Thread(testMQ.new ProductorMq(producter)).start(); // Thread 4 new Thread(testMQ.new ProductorMq(producter)).start(); // Thread 5 new Thread(testMQ.new ProductorMq(producter)).start(); } private class ProductorMq implements Runnable { Producter producter; public ProductorMq(Producter producter) { this.producter = producter; } @Override public void run() { while (true) { try { producter.sendMessage("Jaycekon-MQ"); Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } } }}
执行结果如下:
查看后台:
测试消费者
查看后台:
阅读全文
0 0
- activeMq 入门教程
- ActiveMQ入门教程
- 消息队列activemq入门教程
- ActiveMQ学习笔记-入门教程
- ActiveMQ入门教程(一) - JMS和ActiveMQ简介
- ActiveMQ入门教程(二) - ActiveMQ的安装
- ActiveMQ入门教程(三) - ActiveMQ P2P版的HelloWorld
- ActiveMQ入门教程(四) - ActiveMQ Pub/Sub版的HelloWorld
- ActiveMQ入门教程(五) - ActiveMQ与Spring整合
- ActiveMQ入门教程(六) - ActiveMQ与Spring整合-MessageListener
- 5、ActiveMQ入门教程(五)--Spring和ActiveMQ整合
- 6、ActiveMQ入门教程(六)Spring与ActiveMQ整合
- ActiveMQ 快速入门教程系列 第一章 点对点消息实现
- ActiveMQ
- ACtiveMQ
- ACtiveMQ
- activeMQ
- ActiveMQ
- web实现进入指定目录
- Android 如何解决Android的库自定义属性和生成过程中的包名重映射?
- java.lang.AbstractMethodError: org.apache.bval.jsr303.ConfigurationImpl.getDefaultParameterName....
- JAVA连接Redis错误提示(一)
- 乘法逆元+扩展欧几里得+Lucas
- ActiveMQ入门教程
- nltk词性标注英文简称及分类
- Servlet和Filter的共同点和区别
- 2017.08.16【NOIP 普及组】模拟赛C组总结
- PLSQL 有效序列号
- Faster R-CNN 深入理解 && 改进方法汇总
- MySQ数据库中的基础语句
- 1.1.2列表应用
- 关于redis的冷热数据分离