1、下载

下载二进制bin文件:http://activemq.apache.org/activemq-5132-release.html

下载源码:

2、启动:

解压任意路径:

启动后:

3、访问:

访问http://localhost:8161/admin/  用户名&密码:admin

4、主要应用:

5、点对点消息发送&接收

首先是producer方:

package com.activemq.test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息生产者
*
* @author Administrator
*
*/
public class JMSProducer { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线 private static final int SENDNUM = 10; // 发送消息总量 public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageProducer messageProducer = null; // 消息生产者 connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD,
JMSProducer.BROKERURL);
try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 创建session,true表示添加事务 destination = session.createQueue("FirstQueue"); // 创建消息队列 messageProducer = session.createProducer(destination); // 创建消息生产者 sendMessage(session, messageProducer); session.commit(); //commit提交
} catch (Exception e) {
e.printStackTrace();
}finally {
if(connection != null){
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
} /**
* 发送消息
*
* @param session
* @param messageProducer
* @throws Exception
*/
public static void sendMessage(Session session, MessageProducer messageProducer) throws Exception {
for (int i = 0; i < SENDNUM; i++) {
TextMessage textMessage = session.createTextMessage("Active MQ消息"+i); //文本消息
System.out.println("发送消息: Active MQ消息"+i);
messageProducer.send(textMessage);
}
} }

然后是消费方实现,主要有两种,一种是直接receive方法接收消息,一种是通过监听实现:

receive:

package com.activemq.test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息消费者
* 普通receive方式接收消息
* @author Administrator
*
*/
public class JMSConsumer { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线
public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageConsumer messageConsumer = null; //消息消费者 connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD,
JMSConsumer.BROKERURL); try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建session,false表示不添加事务 destination = session.createQueue("FirstQueue"); // 创建消息队列 messageConsumer = session.createConsumer(destination); // 创建消息消费者 while (true) {
TextMessage textMessage = (TextMessage)messageConsumer.receive(100000); //接收消息(文本消息)
if(textMessage != null){
System.out.println("接收到的消息:"+textMessage.getText());
}else{
break;
}
}
} catch (JMSException e) {
e.printStackTrace();
} } }

监听方式:

package com.activemq.test;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* 消息监听
* @author Administrator
*
*/
public class Listener implements MessageListener{ @Override
public void onMessage(Message message) { try {
System.out.println("接收到的消息:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
} }
}
package com.activemq.test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息消费者
* 普通receive方式接收消息
* @author Administrator
*
*/
public class JMSConsumer2 { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线
public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageConsumer messageConsumer = null; //消息消费者 connectionFactory = new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD,
JMSConsumer2.BROKERURL); try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建session,false表示不添加事务 destination = session.createQueue("FirstQueue"); // 创建消息队列 messageConsumer = session.createConsumer(destination); // 创建消息消费者 messageConsumer.setMessageListener(new Listener()); //注册监听
} catch (JMSException e) {
e.printStackTrace();
} } }

几轮测试下来,消费生产记录:

6、发布订阅模式

新建订阅1:

package com.activemq.test2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息消费者 -- 消息订阅者1
* 普通receive方式接收消息
* @author Administrator
*
*/
public class JMSConsumer { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线
public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageConsumer messageConsumer = null; //消息消费者 connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD,
JMSConsumer.BROKERURL); try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建session,false表示不添加事务 destination = session.createTopic("SecondTopic"); // 创建消息订阅 messageConsumer = session.createConsumer(destination); // 创建消息消费者 messageConsumer.setMessageListener(new Listener()); //注册监听
} catch (JMSException e) {
e.printStackTrace();
} } }
package com.activemq.test2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* 消息监听-消息订阅者1的监听
* @author Administrator
*
*/
public class Listener implements MessageListener{ @Override
public void onMessage(Message message) { try {
System.out.println("订阅者1接收到的消息:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
} }
}

订阅2:

package com.activemq.test2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息消费者 -- 消息订阅者2
* 普通receive方式接收消息
* @author Administrator
*
*/
public class JMSConsumer2 { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线
public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageConsumer messageConsumer = null; //消息消费者 connectionFactory = new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD,
JMSConsumer2.BROKERURL); try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建session,false表示不添加事务 destination = session.createTopic("SecondTopic"); // 创建消息订阅 messageConsumer = session.createConsumer(destination); // 创建消息消费者 messageConsumer.setMessageListener(new Listener2()); //注册监听
} catch (JMSException e) {
e.printStackTrace();
} } }
package com.activemq.test2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* 消息监听-消息订阅者1的监听
* @author Administrator
*
*/
public class Listener2 implements MessageListener{ @Override
public void onMessage(Message message) { try {
System.out.println("订阅者2接收到的消息:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
} }
}

消息一定要先订阅,然后producer再发布,否则先发布再订阅的话后边才订阅的一方是收不到之前发布的消息的!

然后是发布方:

package com.activemq.test2;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /**
* 消息生产者
*
* @author Administrator
*
*/
public class JMSProducer { private static final String USERNAME = ActiveMQConnectionFactory.DEFAULT_USER; // 默认连接用户
private static final String PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD; // 默认连接密码
private static final String BROKERURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL; // 默认消息总线 private static final int SENDNUM = 10; // 发送消息总量 public static void main(String[] args) { ConnectionFactory connectionFactory = null; // 连接工厂
Connection connection = null; // 连接对象 Session session = null; // 会话级session,接收或发送消息的线程
Destination destination = null; // 消息发送的目的地 MessageProducer messageProducer = null; // 消息生产者 connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD,
JMSProducer.BROKERURL);
try {
connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); // 创建session,true表示添加事务 destination = session.createTopic("SecondTopic"); // 创建发布主题 messageProducer = session.createProducer(destination); // 创建消息发布者 sendMessage(session, messageProducer); session.commit(); // commit提交
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
} /**
* 发送消息
*
* @param session
* @param messageProducer
* @throws Exception
*/
public static void sendMessage(Session session, MessageProducer messageProducer) throws Exception {
for (int i = 0; i < SENDNUM; i++) {
TextMessage textMessage = session.createTextMessage("Active MQ发布消息" + i); // 文本消息
System.out.println("发送消息: Active MQ 发布的消息" + i);
messageProducer.send(textMessage);
}
}
}

运行效果查看:

JMS消息中间件之ActiveMQ学习的更多相关文章

  1. JMS消息中间件系列[ActiveMQ](一)

    版本5.13.3的特性: 1.Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Rub ...

  2. ActiveMQ学习笔记(5)——使用Spring JMS收发消息

      摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...

  3. 【ActiveMQ】Spring Jms集成ActiveMQ学习记录

    Spring Jms集成ActiveMQ学习记录. 引入依赖包 无论生产者还是消费者均引入这些包: <properties> <spring.version>3.0.5.REL ...

  4. 学习笔记-记ActiveMQ学习摘录与心得(一)

    这两天在看开源的MQ技术,趁着晚上安静,把这两天学的东西摘录下.在公司学东西效率真心捉鸡,心里总觉得别扭,拿了公司的钱不干活还在那学习,表示心情不淡定,效率不行啊...晚上时间是我的,下班还是蛮开心的 ...

  5. ActiveMQ学习教程/1.简要介绍与安装

    ActiveMQ学习教程(一)——简要介绍与安装 一.名词: 1.JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的 ...

  6. ActiveMQ学习总结(一)

    自己写的网上商城项目中使用了ActiveMQ,虽然相比于RabbitMQ,kafka,RocketMQ等相比,ActiveMQ可能性能方面不是最好的选择,不过消息队列其实原理区别不大,这里对学过的关于 ...

  7. 手把手教你如何玩转消息中间件(ActiveMQ)

    手把手教你如何玩转消息中间件(ActiveMQ) 2018年07月15日 18:07:39 Cs_hnu_scw 阅读数 12270 标签: 中间件消息中间件ActiveMQ分布式集群 更多 个人分类 ...

  8. ActiveMQ学习总结------原生实战操作(下)03

    本篇将继续延续上一篇的内容,作为知识补充篇,为接下来我们学习spring整合ActiveMQ打好基础 本篇主要学习内容: 1.ActiveMQ 队列服务监听 2.ActiveMQ Topic模型 回顾 ...

  9. ActiveMQ学习教程/2.简单示例

    ActiveMQ学习教程(二)——简单示例 一.应用IDEA构建Maven项目 File->New->Module...->Maven->勾选->选择->Next ...

随机推荐

  1. “全栈2019”Java第四十章:this关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. shell__常用命令__grep

    grep | zgrep (不用解压zip就能直接搜索) -i 不区分大小写 -I 忽略二进制文件 -R或r 递归文件目录 -c 计算找到的总数量 -n 显示行号 -v 显示不包含匹配文本的所有行 - ...

  3. 1.Java Spring MVC入门 安装

    Spring 下载地址: 4.3.6.RELEASE/ 25-Jan-2017 14:05 - http://repo.spring.io/release/org/springframework/sp ...

  4. php sapi 产生core 文件

    php sapi 产生core 文件 1) vim /usr/local/php7.1.6-debug/etc/php-fpm.conf rlimit_core = 0 改为 rlimit_core ...

  5. python 常用模块大全

    1.getpass 模块  一般用于获取用户输入的密码 import getpass pwd = getpass.getpass('input your pass') print(pwd) print ...

  6. 一个python 服务器程序性能分析

    该服务器为bono,启动11个进程. 1.设置cprofile 在启动服务的总入口设置cprofile if __name__=="__main__": import cProfi ...

  7. 大数据平台-修改主机名及ssh免密码登录

    一.查看服务器初始配置: 1.总核数 = 物理CPU个数 X 每颗物理CPU的核数 2.总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /pr ...

  8. python学习,day3: 文件的读写

    # coding=utf-8 # Author: RyAn Bi import sys f1 = open('yesterday2',mode='w',encoding='utf-8') #w 只能写 ...

  9. 《The One 团队》第二次作业:团队项目选题

    项目 内容 作业所属课程 http://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/10726884.h ...

  10. Removable Storage Devices文件夹删除方法

    Windows10的桌面上出现了名为“Removable Storage Devices”的文件夹删除方法 比较莫名奇妙,突然桌面上出现了名为“Removable Storage Devices”的文 ...