前言: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中间件-发布订阅模式的更多相关文章

  1. ActiveMQ (二)—发布订阅模式

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  2. SpringBoot2.0之整合ActiveMQ(发布订阅模式)

    发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...

  3. 【ActiveMQ】- 发布/订阅模式

    publish/subscribe 特点:A发送的消息可以被所有监听A的对象的接收,就好比学校的广播,所有的学生都可以收听校园广播信息. 消息生产者: package com.zhiwei.advan ...

  4. ActiveMQ发布订阅模式

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  5. ActiveMQ发布订阅模式(转)

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  6. ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  7. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  8. ActiveMQ的p2p模式与发布订阅模式

    1.消息中间件:采用异步通讯防止,支持点对点以及发布订阅模式,可以解决高并发问题        传统调用接口,可能发生阻塞,重复提交,超时等等问题,可以利用消息中间件发送异步通讯请求          ...

  9. redis实现消息队列&发布/订阅模式使用

    在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录.   Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...

随机推荐

  1. ContenteProvider

    以前只写过程序中添加背景音乐,在程序一开始就运行音乐,当程序结束后音乐也随即停止.遇到这样的功能,我们一般是通过系统提供的ContentProvider来实现的,系统对于常用的数据也给开发者提供了方便 ...

  2. Liunx read

    read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据 ...

  3. andorid 配置器组件和提示消息

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  4. linux使用笔记4

    运行已经安装好的软件: cd到这个软件的安装目录 输入命令/:./软件名称 就可以了 运行geoserver 1.首先需要添加JAVA_HOME的环境变量: 在服务器没有设置JAVA_HOME的情况下 ...

  5. How to Solve Lonsdor K518ISE Abnormal Display by Factory Resetting

    Here’s the working solution to Lonsdor K518ISE Key Programmer abnormal display after upgrade. Proble ...

  6. dbus 消息和消息总线实例讲解-二

    转自:http://www.fmddlmyy.cn/text53.html 2.3.2.ListActivatableNames和服务器的自动启动 运行: $ dbus-send --system - ...

  7. 如何为linux系统设置全局的默认网络代理

    方法1:更改全局配置文件/etc/profile all_proxy="all_proxy=socks://proxy.xxx.com.cn:80/" ftp_proxy=&quo ...

  8. target runtime apache v6.0 not defined解决

    在加载别人的一个项目时,会报该错误,需要先在buildpath中remove v6的版本,再点击add library,选择server runtime,如果eclipse配置过Tomcat,可以选择 ...

  9. bowtie:短序列比对的新工具

    bowtie:短序列比对的新工具(转) (2014-11-17 22:15:24) 转载▼ 标签: 转载   原文地址:bowtie:短序列比对的新工具(转)作者:玉琪星兆 Bowtie是一个超级快速 ...

  10. python爬虫_简单使用百度OCR解析验证码

    百度技术文档 首先要注册百度云账号: 在首页,找到图像识别,创建应用,选择相应的功能,创建 安装接口模块: pip install baidu-aip 简单识别一: 简单图形验证码: 图片: from ...