ACtiveMQ中间件-发布订阅模式
1.MQ是什么
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。其中较为成熟的MQ产品有IBM WEBSPHERE MQ、Apache ActiveMQ等等。
1.1.ActiveMQ的概述
ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。
1.3.ActiveMQ的实现原理

如图所示:当客户端A和客户端B通信,客户端A发送消息到队列或主题中,然后等待客户端B接收消息。当客户端B接收消息并且确认消息后,消息才会
从队列中删除。
2.ActiveMQ的下载
2.1.下载路径
官方网站下载:http://activemq.apache.org/
2.2ActiveMQ的运行
我下载的是active5.9版本的进入ActiveMQ的解压包bin目录开始启动服务

2.2.ActiveMQ发布订阅模式代码示例
首先添加jar包为

开始编写代码既然是消息中间件就是来处理消息的,那么处理消息就有发送方和接收方,在发布订阅模式下面需先运行消息接收方在运行发送方可接收到消息
发送方代码
/**
* @摘要 测试发送单条数据的类
*/
public class ZMQOneSendTest{
public static void main(String[] args) throws Exception {
// 4.开始建立连接时间
Long nStartTime = System.currentTimeMillis(); // 5.建立连接工厂
org.apache.activemq.ActiveMQConnectionFactory nFactory = new org.apache.activemq.ActiveMQConnectionFactory("tcp://localhost:61616"); // 6.用工厂建立Connection连接
javax.jms.TopicConnection nConnection = nFactory.createTopicConnection(); // 7.创建会话Session,不启动事务,签收模式为自动确认模式
javax.jms.TopicSession nSession = nConnection.createTopicSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE); // 8.创建主题
javax.jms.Topic nTopic = nSession.createTopic("199"); // 9.创建发布者
javax.jms.TopicPublisher nPublihser = nSession.createPublisher(nTopic); // 10.设置持久化
nPublihser.setDeliveryMode(javax.jms.DeliveryMode.PERSISTENT); // 11.启动连接
nConnection.start(); // 12.查询开始时间
Long nStartSelectTime = System.currentTimeMillis(); // 14.查询结束时间
Long nEndSelectTime = System.currentTimeMillis(); // 15.创建消息
javax.jms.TextMessage nMessage = nSession.createTextMessage();
nMessage.setText("我是发送的数据"); // 16.发送开始时间
Long nStartSendTime = System.currentTimeMillis(); // 17.发布者发布消息
nPublihser.publish(nMessage); // 18.发布结束时间
Long nEndSendTime = System.currentTimeMillis(); // 19.打印消息
System.out.println("已发送消息 "+nMessage); // 关闭发布者、会话、连接
nPublihser.close();
nSession.close();
nConnection.close();
// 20.计算时间
System.out.println("查询消息时间 "+(nEndSelectTime-nStartSelectTime));
System.out.println("发送消息时间"+(nEndSendTime-nStartSendTime));
System.out.println("总时间"+(nEndSendTime-nStartTime));
} }
接收方代码
import javax.jms.JMSException;
public class ZMQReadTest {
	public static void main(String[] args) throws JMSException {
		// 1.建立连接工厂
		org.apache.activemq.ActiveMQConnectionFactory nFactory = new org.apache.activemq.ActiveMQConnectionFactory("tcp://localhost:61616");
		// 2.用工厂建立Connection连接
		javax.jms.TopicConnection nTopicConnection = nFactory.createTopicConnection();
		// 3.为客户端设置一个唯一ID
		nTopicConnection.setClientID("5");
		// 4.创建会话Session,不启动事务,签收模式为自动确认模式
		javax.jms.TopicSession nSession = nTopicConnection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
		// 5.创建主题
		javax.jms.Topic nTopic = nSession.createTopic("199");
		// 6.创建订阅者
		javax.jms.TopicSubscriber nTopicSubscriber = nSession.createDurableSubscriber(nTopic, "min");
		// 6.1.为消费者添加消息监听器,onMessage方法接收消息
		nTopicSubscriber.setMessageListener(new javax.jms.MessageListener() {
			public void onMessage(javax.jms.Message nMessage) {
				try {
					if (nMessage instanceof javax.jms.TextMessage) {
						String nTextMessage = ((javax.jms.TextMessage) nMessage).getText();
						System.out.println("收到的消息:" + nTextMessage);
					}
				} catch (javax.jms.JMSException e) {
					e.printStackTrace();
				}
			}
		});
		// 7.开启连接
		nTopicConnection.start();
	}
}
测试消息的发送和接收是否成功时需要先运行消费者(消息的接收者)再运行生产者(消息发送者)当显示如下消息接收方和发送方打印消息如下即可。


好的给大家写好一个发布订阅案例了不懂的可以问我哈!!!
ACtiveMQ中间件-发布订阅模式的更多相关文章
- ActiveMQ (二)—发布订阅模式
		
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
 - SpringBoot2.0之整合ActiveMQ(发布订阅模式)
		
发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...
 - 【ActiveMQ】- 发布/订阅模式
		
publish/subscribe 特点:A发送的消息可以被所有监听A的对象的接收,就好比学校的广播,所有的学生都可以收听校园广播信息. 消息生产者: package com.zhiwei.advan ...
 - ActiveMQ发布订阅模式
		
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
 - ActiveMQ发布订阅模式(转)
		
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
 - ActiveMQ发布订阅模式  转发 https://www.cnblogs.com/madyina/p/4127144.html
		
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
 - ActiveMQ入门系列三:发布/订阅模式
		
在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...
 - ActiveMQ的p2p模式与发布订阅模式
		
1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题 传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求 ...
 - redis实现消息队列&发布/订阅模式使用
		
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
 
随机推荐
- 36-2018 蓝桥杯Java B组试题及答案
			
1:第几天2000年的1月1日,是那一年的第1天.那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 用excel算,答案125. 2.标题:方格计数 ...
 - Linux下打开超大文件方法
			
在Linux下用VIM打开大小几个G.甚至几十个G的文件时,是非常慢的. 这时,我们可以利用下面的方法分割文件,然后再打开. 1 查看文件的前多少行 head -10000 /var/lib/mysq ...
 - [z]分区truncate操作的介绍及对全局索引和空间释放影响的案例解析
			
[z]https://www.2cto.com/database/201301/181226.html 环境: [sql] [oracle@localhost ~]$ uname -r 2.6.18- ...
 - 文章如何做伪原创 SEO大神教你几招做"原创"网站文章的心得
			
想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...
 - 为Linux虚拟机设置网络
			
安装虚拟机的时候为了使用方便我们除了需要设置静态ip为了能够让虚拟机也能够上网我们需要设置虚拟机网络 当然也可以使用虚拟机和主机共享上网,这个比较简单,这里就不说了,现在我们来通过桥接的方式为虚拟机设 ...
 - How do I configure a Wired Ethernet interface
			
1.In order to configure the Wired Ethernet interface the MDI must be connected to the PC using the U ...
 - spec文件写作规范
			
spec文件写作规范 2008-09-28 11:52:17 分类: LINUX 1.The RPM system assumes five RPM directories BUILD:rpmbuil ...
 - Java中方法的重写
			
★★前提:方法的重写建立在继承关系上★★ 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 所谓方法的重写是指子类中的方法与父类中继承 ...
 - sys安装
			
1.将SYS驱动文件放到系统目录的SYSTEM32目录中.2.按WIN+R组合键,在运行框中输入:regsvr32 sys所在全路径,点击确定即可.
 - netstat 查看端口命令
			
查看特定端口是否启动 netstat -lnp |