ActiveMQ入门实例Demo
前面我们已经搭建和配置好了ActiveMQ,下面来看一个Demo,体验一下MQ。
JMS 消息模型
JMS消息服务应用程序结构支持两种模型:点对点模型,发布者/订阅者模型。
(1)点对点模型(Queue)
一个生产者向一个特定的队列发布消息,一个消费者从这个队列中依次读取消息。
模型特点:只有一个消费者获得消息。
(2)发布者/订阅者模型(Topic)
0个或多个订阅者可以接受特定主题的消息。
模型特点:多个消费者可获得消息。
Topic和Queue的最大区别在于Topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而Queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。
JMS消息格式
- MapMessage -- key-value键值对
- TextMessage -- 字符串对象
- ObjcetMessage -- 一个序列化的Java对象
- ByteMessage -- 一个未解释字节的数据流
- StreamMessage -- Java原始值的数据流
点对点模型Demo
public class Constants { public static final String MQ_NAME = "parry"; public static final String MQ_PASSWORD = "parry123"; public static final String MQ_BROKETURL = "tcp://192.168.56.129:61616";
}
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; import com.parry.demo.constant.Constants; /**
*
* <p>
* MSProduct 点对点模型-消息生产者
* <p>
*/
public class MSProduct { public static void main(String[] args) {
// 连接工厂
ConnectionFactory factory;
// 连接实例
Connection connection = null;
// 收发的线程实例
Session session;
// 消息发送目标地址
Destination destination;
// 消息创建者
MessageProducer messageProducer;
try {
factory = new ActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD,
Constants.MQ_BROKETURL);
// 获取连接实例
connection = factory.createConnection();
// 启动连接
connection.start();
// 创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到消息)
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 创建队列(返回一个消息目的地)
destination = session.createQueue("parryQuene");
// 创建消息生产者
messageProducer = session.createProducer(destination);
// 创建TextMessage消息实体
TextMessage message = session.createTextMessage("我是parry,这是我的第一个消息!");
messageProducer.send(message);
session.commit();
} catch (JMSException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
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; import com.parry.demo.constant.Constants;
/**
* <p>
* MQConsumer 点对点--消息消费者
* <p>
*/
public class MQConsumer { public static void main(String[] args) {
// 连接工厂
ConnectionFactory connectionFactory;
// 连接实例
Connection connection = null;
// 收发的线程实例
Session session;
// 消息发送目标地址
Destination destination;
try {
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);
// 获取连接实例
connection = connectionFactory.createConnection();
// 启动连接
connection.start();
// 创建接收或发送的线程实例(消费者就不需要开启事务了)
session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
// 创建队列(返回一个消息目的地)
destination = session.createQueue("parryQuene");
// 创建消息消费者
MessageConsumer consumer = session.createConsumer(destination);
//注册消息监听
consumer.setMessageListener(new MQListerner());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* <p>
* MQListerner 生产者监听器
* <p>
*/
public class MQListerner implements MessageListener{ @Override
public void onMessage(Message message) {
try {
System.out.println(((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
发布者/订阅者模型Demo
(1)发布者
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; import com.parry.demo.constant.Constants; /**
* <p>
* MQProducer 订阅消息的发送者
* <p>
*/
public class MQProducer { public static void main(String[] args) {
// 连接工厂
ConnectionFactory factory;
// 连接实例
Connection connection = null;
// 收发的线程实例
Session session;
// 消息发送目标地址
Destination destination; try {
// 实例化连接工厂
factory = new ActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);
// 获取连接实例
connection = factory.createConnection();
// 启动连接
connection.start();
// 创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到消息)
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 创建队列(返回一个消息目的地)
destination = session.createTopic("parryTopic");
// 创建消息发布者
MessageProducer producer = session.createProducer(destination);
// 创建TextMessage消息
TextMessage message = session.createTextMessage("你好,这是我发布的第一条消息!");
// 发布消息
producer.send(message);
} catch (JMSException e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
(2)订阅者01
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; import com.parry.demo.constant.Constants; /**
* <p>
* MQCousumer01 订阅-发布模式 订阅者01
* <p>
*/
public class MQCousumer01 { public static void main(String[] args) {
// 连接工厂
ConnectionFactory factory;
// 连接实例
Connection connection = null;
// 收发的线程实例
Session session;
// 消息发送目标地址
Destination destination;
try {
// 实例化连接工厂
factory = new ActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);
// 获取连接实例
connection = factory.createConnection();
// 启动连接
connection.start();
// 创建接收或发送的线程实例
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 创建队列(返回一个消息目的地)
destination = session.createTopic("parryTopic");
// 创建消息订阅者
MessageConsumer consumer = session.createConsumer(destination);
// 消息发布者添加监听器
consumer.setMessageListener(new Listerner01());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* <p>
* Listerner01 订阅者01的监听器
* <p>
*/
public class Listerner01 implements MessageListener{ @Override
public void onMessage(Message message) {
try {
System.out.println("订阅者01接收到消息:" + ((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
(3)订阅者02
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; import com.parry.demo.constant.Constants; /**
* <p>
* MQCousumer02 订阅-发布模式 订阅者02
* <p>
*/
public class MQCousumer02 { public static void main(String[] args) {
// 连接工厂
ConnectionFactory factory;
// 连接实例
Connection connection = null;
// 收发的线程实例
Session session;
// 消息发送目标地址
Destination destination;
try {
// 实例化连接工厂
factory = new ActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);
// 获取连接实例
connection = factory.createConnection();
// 启动连接
connection.start();
// 创建接收或发送的线程实例
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 创建队列(返回一个消息目的地)
destination = session.createTopic("parryTopic");
// 创建消息订阅者
MessageConsumer consumer = session.createConsumer(destination);
// 消息发布者添加监听器
consumer.setMessageListener(new Listerner02());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* <p>
* Listerner02 订阅者02的监听器
* <p>
*/
public class Listerner02 implements MessageListener{ @Override
public void onMessage(Message message) {
try {
System.out.println("订阅者02接收到消息:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
ActiveMQ入门实例Demo的更多相关文章
- ActiveMQ介绍和ActiveMQ入门实例
ActiveMQ百度百科 ActiveMQ入门实例-cnblogs.com 作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通
- ActiveMQ入门实例
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- java 消息机制 ActiveMQ入门实例
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 我下载的时候是 ActiveMQ 5.14.0 Release版 2.运行ActiveMQ 解压缩ap ...
- .Net平台下ActiveMQ入门实例
1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到“感谢那您的订单” 页面.不仅如此,若果没有延 ...
- ActiveMQ入门实例(转)
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- .Net平台下ActiveMQ入门实例(转)
1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到"感谢那您的订单" 页面. ...
- 转发 .Net平台下ActiveMQ入门实例 https://www.cnblogs.com/madyina/p/4121458.html
1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到“感谢那您的订单” 页面.不仅如此,若果没有延 ...
- Java消息机制 ActiveMQ入门实例
转载自:http://www.cnblogs.com/wyh3721/p/5917316.html 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ ...
- ActiveMQ入门实例(转)
转载自:http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html 1.下载ActiveMQ 去官方网站下载:http://act ...
随机推荐
- [Tool] github 入手教程
简单的介绍一下 Github 的基本操作. 主页:https://github.com/ 首先自然是在 GitHub 注册一个帐号了.然后开始正文吧. Git 基本介绍 Git 是属于分布式版本控制系 ...
- js正则表达式校验非负浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 安装MySql for Visual Studio的坑
阅读目录 问题描述 解决过程 解决方案 总结 回到顶部 问题描述 安装MySql for Visual Studio 一般来说是为了能在VS的服务器数据连接的数据源中能选择MySql类型,如下图: 但 ...
- 无脑简单 命令升级git Centos
yum remove git yum install zlib (系统默认已经装上) yum install zlib-devel ># wget https://github.com/git/ ...
- storm0.9.5集群安装
安装前的准备工作 关闭防火墙 chkconfig iptables off && setenforce 0 创建用户 groupadd realtime && user ...
- node.js express安装及示例网站搭建
1.首先肯定是要安装Node.JS windows cmd依次输入如下命令: cd C:\Program Files\nodejs\ npm install -g expressnpm install ...
- 移动端web开发——视口
本篇主要是记录一下移动端视口的分类说明和其它的一些知识.在开始之前,先看一个典型的例子: <meta name="viewport" content="width= ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- iOS --SQL的增加、删除、查找、修改
iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Manager的步骤: 第一步:在工具栏找到附加 ...
- 【转】JVM 架构解读
每个Java开发人员都知道字节码由JRE(Java运行时环境)执行.但许多人不知道JRE是Java Virtual Machine(JVM)的实现,它分析字节码,解释代码并执行它.作为开发人员,我们应 ...