
ActiveMQ
ActiveMQ笔记
王劭阳
这个作者很懒,什么都没留下…
展开
-
ActiveMQ笔记-目录
首先说下教程来源:https://www.bilibili.com/video/av55976700在这里,由衷的感谢尚硅谷的免费教程!根据视频的分p,把每个视频里的内容做了下整理,方便自己以后查看。如果有错误,欢迎大家指出,谢谢!如果有疑问,可以一起讨论,QQ:872452093。目录:01-前言说明02-两种讲授闲聊03-MQ的产品学习说明04-为什么要引入MQ_...原创 2020-02-12 17:16:00 · 237 阅读 · 0 评论 -
ActiveMQ实践建议
消息转发模式ActiveMQ支持两种消息转发模式:PERSISTENT(持久化)和NON_PERSISTENT(非持久化)消息。ActiveMQ默认采用的是PERSISTENT模式,消息在发送到ActiveMQ服务端后被持久化(持久化方案有多种,比如JDBC、AMQ、KahaDB、LevelDB等),如果消息服务器出现故障,可以恢复此消息并将消息传送至消费者,这种模式保证消息只被传送一次和成功...原创 2020-02-13 08:12:21 · 553 阅读 · 0 评论 -
ActiveMQ笔记01-前言说明
什么是ActiveMQ?既然说到ActiveMQ,那就说说MQ,MQ是Message Queue的缩写,翻译过来就是消息队列或消息中间件,再解释的直观点,就是用来存储消息的一个地方嘛~MQ是一个理念,或者说是一个抽象的解决方案,根据需求的不同,具体的实现,常见的有4种:ActiveMQ,RabbitMQ,RocketMQ,kafka。这里说的ActiveMQ就是消息队列的其中一种实现。什么...原创 2019-12-30 05:38:12 · 128 阅读 · 0 评论 -
ActiveMQ笔记02-两种讲授闲聊
如何学习ActiveMQ?第一步,要会用。第二步,为什么要用。第三步,看底层源码实现。许多时候,学习技术仅仅停留在第一步,调用api会用的阶段,在面试中,面试官一旦问你到第二步,可能就把你问懵了,第三步自然更不懂了。试想,调api谁不会呢?要想在面试中突出出来,就要懂得别人不懂的东西,这才是亮点。...原创 2019-12-30 05:48:11 · 117 阅读 · 0 评论 -
ActiveMQ笔记03-MQ的产品学习说明
MQ的种类市面上常见的MQ有:ActiveMQ,RabbitMQ,RocketMQ,kafka。MQ的技术维度调用api,实现消息的发送和接受 MQ的高可用性(不能轻易挂掉) MQ的集群和容错配置(消息不能错,不能重复消费) MQ的持久化(消息不能丢) 延时发送、定时投递 签收机制(MQ收到消息后,反馈给producer的一种机制) 和Spring框架的整合...原创 2019-12-30 06:00:13 · 144 阅读 · 0 评论 -
ActiveMQ笔记04-为什么要引入MQ_上
为什么要引入MQ,引入MQ给我带来什么好处?从对比的角度来看问题,也就是引入MQ之前和引入MQ之后的对比。在引入MQ之前:举一个生活中的例子:学生找老师问问题,我们知道,学生是多于老师的,老师每次只能给一个学生回答问题,后面来了学生只好排队等待。后面的人可能会等很久,越积压越多,如果把学生看做一个系统,老师看做一个系统,那么随着系统的运行,学生系统和老师系统的交互就会越来越慢,这不是我...原创 2019-12-30 06:22:50 · 177 阅读 · 0 评论 -
ActiveMQ笔记05-为什么要引入MQ_下
再回到实际开发环境中,当没有MQ的时候。耦合度高:对于下游系统需要的数据格式可能会不一样,传递的参数可能也不一样,每当增加一个下游系统,上游系统需要不断的改代码,做定制,对于上游系统来说,工作量是非常庞大的,不利于系统的维护和调试。很容易被大量请求打死:对于一个秒杀系统来说,当用户发起的请求过多,对系统的压力是非常大的,可能一秒钟有成千上万个请求打过来,服务器扛不住,就宕机了。...原创 2019-12-30 06:43:05 · 127 阅读 · 0 评论 -
ActiveMQ笔记06-MQ的作用定义
MOM面向消息的中间件(message-oriented middleware)可以很好的解决上一节说的问题。MOM利用高效可靠的消息传递机制进行平台无关的数据交流,基于数据通信来进行分布式集成。通过提供消息传递和消息排队模型,在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等功能。发送者把消息发送给服务器,服务器将消息存放在若干队列/主题中,在合适的时候,...原创 2019-12-30 07:06:46 · 145 阅读 · 0 评论 -
ActiveMQ笔记07-ActiveMQ官网介绍和下载
ActiveMQ的官网:http://activemq.apache.org/点击“Download Latest”下载最新版本,选择Unix/Linux/Cygwin版本,因为我们要把ActiveMQ部署在Linux虚拟机上。点击“Find out more”可以下载到历史版本,这里我下载的是apache-activemq-5.15.9-bin.tar.gz文件。历史版本下载地址...原创 2019-12-30 08:19:49 · 1193 阅读 · 0 评论 -
ActiveMQ笔记08-ActiveMQ在Linux下安装
将ActiveMQ放到Linux中,使用命令“tar -zxvf apache-activemq-5.15.9-bin.tar.gz”解压缩。在bin目录下使用命令“./activemq start”启动ActiveMQ使用命令“./activemq stop”关闭ActiveMQ使用命令“./activemq status”查看ActiveMQ的状态。ActiveMQ的默认端...原创 2019-12-31 21:18:14 · 176 阅读 · 0 评论 -
ActiveMQ笔记09-ActiveMQ安装后的控制台访问
回想Tomcat在启动后,我们可以通过访问localhost:8080看到也Tomcat的前端界面,那么ActiveMQ有没有前端界面呢?答案是有的,下面我们来访问一下。首先,要保证物理机和虚拟机在同一网段下,这里使用桥接的方式,让虚拟机和物理机在同一网段下,在Windows里通过ipconfig来查看下物理机的ip地址,在虚拟机里通过ifconfig或者ip addr来查看虚拟机的ip地...原创 2019-12-31 22:56:58 · 369 阅读 · 0 评论 -
ActiveMQ笔记10-Java编码MQ标准API讲解
新建一个maven项目,这里我用的是IDEA,新建好之后,打开pom.xml文件,便于复制,我把pom文件粘贴于下。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20...原创 2020-01-01 14:30:49 · 210 阅读 · 0 评论 -
ActiveMQ笔记11-消息生产者编码
创建JmsProducer类,进行编码,在导包的时候,注意选择jsm的包,为了方便,我把代码贴出来。package com.wsy.activemq.queue;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class JmsProducer { public ...原创 2020-01-01 16:31:49 · 250 阅读 · 0 评论 -
ActiveMQ笔记12-消息消费者编码
创建JmsConsumer类,前面的连接部分和JmsProducer类似,为了方便查看,我把代码放上来。package com.wsy.activemq.queue;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class JmsConsumer { publi...原创 2020-01-01 16:51:17 · 304 阅读 · 0 评论 -
ActiveMQ笔记13-消息消费者receive方法说明
上一节提到消费者的receive()方法可以传递一个long类型的参数,代表等待超时时间,可以修改JmsConsumer方法里的receive()方法,传递一个毫秒数,再次尝试,查看效果。与之前不同的是,这次程序消费完消息后,等待了若干时间后,自动就停止了,查看ActiveMQ的前台界面里,消费者数量自然变成了0。点进MessageConsumer里可以看到,还有一个receiveNoWa...原创 2020-01-01 17:10:13 · 1678 阅读 · 0 评论 -
ActiveMQ笔记14-消息消费者MessageListener方法说明
前面讲到消费者通过receive()方法来接收消息,它是通过同步阻塞的方式来获取消息的,此时程序一直是阻塞的。那么有没有其他方法获取到消息呢?答案是有的,那就是使用MessageListener。package com.wsy.activemq.queue;import org.apache.activemq.ActiveMQConnectionFactory;import java...原创 2020-01-01 18:07:38 · 2649 阅读 · 0 评论 -
ActiveMQ笔记15-消费者3大消费情况
1.先生产,启动1号消费者,1号消费者能消费到消息吗?答:可以。2.先生产,先启动1号消费者,再启动2号消费者,1号消费者能消费吗?2号消费者能消费吗?答:1号可以消费,2号不能消费,因为消息已经被1号消费者消费完了,没有待消费的消息。如果使用receive()的方式,在ActiveMQ的管理界面可以看到有两个消费者。3.先启动2个消费者,后生产消息,消费情况如何?答:经过多次...原创 2020-01-01 18:30:08 · 419 阅读 · 0 评论 -
ActiveMQ笔记16-队列案例小结
JMS开发基本步骤创建ConnectionFactory的实例 通过ConnectionFactory实例创建JMS连接 启动JMS连接 通过JMS连接创建JMS会话 创建JMS目的地 创建JMS生产者并设置目的地 创建JMS消费者并设置目的地 发送或者接受消息 关闭JMS资源两种消费方式同步阻塞式(receive()方法) 异步非阻塞式(创建MessageListen...原创 2020-01-01 18:40:32 · 126 阅读 · 0 评论 -
ActiveMQ笔记17-Java编码Topic讲解
Topic的特点:生产者将消息发布到Topic中,每个消息可以有多个消费者,属于一对多的关系。 生产者和消费者存在时间上的相关性。订阅某一主题的消费者只能消费自它订阅只后发布的消息。 生产者生产时,topic是不保存消息的,它是无状态的,不落地的,假如无人订阅,那么生产出来的消息就是一条废消息,所以,一般情况下,需要先启动消费者,再启动生产者。上述内容可以联系微信里的关注公众号来理解,我...原创 2020-01-01 19:07:55 · 782 阅读 · 0 评论 -
ActiveMQ笔记18-topic和queue的对比总结
Topic和Queue的对比 比较项目 Topic Queue 工作模式 “订阅-发布”模式,如果当前没有订阅者,消息会被丢弃。如果有多个订阅者,这些订阅者都会收到消息。 “负载均衡”模式,如果当前没有消费者,消息不会丢弃;如果有多个消费者,那么一条消息也只会发给其中一个消费者,并且要求消费者ack信息。 有无状态 无状态。 Queue数据默认在mq服...原创 2020-01-01 19:25:55 · 303 阅读 · 0 评论 -
ActiveMQ笔记19-JMS是什么
先来回忆一下Java EE是什么。Java EE是一套使用Java进行企业级应用开发的,一致遵循的13个核心规范工程标准。Java EE平台提供了一个基于组件的方法来加快设计、开发、装配及部署企业应用程序。JDBC(Java Database)数据库连接 JDNI(Java Naming and Directory Interface)Java的命名和目录接口 EJB(Enterpri...原创 2020-01-01 23:10:56 · 134 阅读 · 0 评论 -
ActiveMQ笔记20-MQ中间件的落地产品
说到MQ,种类还是挺多的,这里只谈4种:ActiveMQ,RabbitMQ,RocketMQ,kafka。常见4种MQ的对比 特征 ActiveMQ RabbitMQ RocketMQ kafka PRODUCER-CONSUMER 支持 支持 支持 支持 PUBLISH-SUBSCRIBE 支持 支持 支持 支...原创 2020-01-02 06:06:40 · 133 阅读 · 0 评论 -
ActiveMQ笔记21-JMS组成的四大元素
从上图可以看出,JMS的组成有4个部分,它们分别是:JMS provider:实现JMS接口规范的消息中间件,也就是MQ服务器 JMS producer:消息生产者,创建和发送JMS消息的客户端应用 JMS consumer:消息消费者,接收和处理JMS消息的客户端应用 JMS message:消息头、消息属性、消息体...原创 2020-01-02 06:13:25 · 222 阅读 · 0 评论 -
ActiveMQ笔记22-Message之消息头
JMS message消息头有5块,分别是:JMSDestination:消息发送的目的地,主要指Queue和Topic,可以针对某条消息使用message.setJMSDestination(Destination destination)方法来设置。 JMSDeliveryMode:持久模式,分为持久(DeliveryMode.PRESISTENT)和非持久(DeliveryMode.N...原创 2020-01-02 06:40:24 · 494 阅读 · 0 评论 -
ActiveMQ笔记23-Message之消息体
JMS消息体:用来封装具体的消息数据。JMS消息体的种类有以下5种,常用的就是TextMessage和MapMessage:TextMessage:普通字符串,包含一个String。 MapMessage:一个Map类型的消息,key为String类型,值为Java的基本类型。 ByteMessage:二进制数组消息,包含一个byte[]。 StreamMessage:Java数据流...原创 2020-01-02 06:50:37 · 431 阅读 · 0 评论 -
ActiveMQ笔记24-Message之消息属性
如果需要除了消息头字段以外的值,那么可以使用消息属性,用来识别、去重、重点标注等操作。消息属性以属性名和属性值对的形式存在,可以将属性理解成消息头的扩展,属性是消息头中没有包括的附加消息,比如可以在属性里指定消息选择器。消息属性就像可以分配给一条消息的附加消息头,它们允许开发者添加有关消息的不透明附加消息。还用于暴露消息选择器在消息过渡时使用的数据。使用message.set*Prop...原创 2020-01-02 07:02:19 · 448 阅读 · 0 评论 -
ActiveMQ笔记25-消息可靠性之非持久化
JMS的可靠性分为3个方面:持久化、事务、签收。持久化包括持久和非持久。非持久:messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);当服务器宕机,消息就不存在了。我们可以做个试验,使用messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);设置为非持久...原创 2020-01-02 07:48:58 · 347 阅读 · 1 评论 -
ActiveMQ笔记26-消息可靠性之持久化和默认策略
持久:messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);当服务器宕机,消息依然存在。我们再做个试验,使用messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);设置为持久化模式,先用生产者产生3条消息发送给MQ,然后手动关闭MQ,再启动MQ,然后用consumer去消费,可...原创 2020-01-02 08:00:21 · 437 阅读 · 0 评论 -
ActiveMQ笔记27-持久化topic
我们知道Topic在运行的时候,是先启动消费者,后启动生产者的。对于Topic的持久化,我们做下面的操作,启动consumer,设置messageProducer是DeliveryMode.PERSISTENT,启动producer,此时消费者可以拿到消息。我们进入管理页面,点击Subscribers标签,可以看到下图。在Active Durable Topic Subscribers里可...原创 2020-01-02 22:05:29 · 768 阅读 · 0 评论 -
ActiveMQ笔记28-消息的生产者事务介绍
还记不记得,在创建session的时候,我们传了两个参数,第一个是事务,第二个是签收,在这篇博客中,我们来说说事务。connection.createSession();方法的第一个参数就是事务,它的值可以是true或false,代表session的提交是事务提交还是非事务提交。当事务的值是false时,只要执行了messageProducer.send()方法,消息就到了队列中,也就是自...原创 2020-01-02 22:46:16 · 362 阅读 · 0 评论 -
ActiveMQ笔记29-消息的消费者事务介绍
事务主要是针对生产者而言的,但是对于消费者,也有事务,于是我们做个试验。将connection.createSession()的第一个参数改为true,表示消费者消费采用事务的方式,通过前面的介绍,我们可以知道,如果开启了事务,就需要手动执行session.commit();来提交事务,假设这时候,我们不提交事务,看看会出现什么情况。先启动生产者,后启动消费者,控制台可以看到消费者消费了消...原创 2020-01-02 22:55:41 · 436 阅读 · 0 评论 -
ActiveMQ笔记30-消息非事务模式下消费者签收介绍
事务主要是偏向生产者,签收主要是偏向消费者。再来看签收参数,之前我们设置的是Session.AUTO_ACKNOWLEDGE,也就是自动签收,可以理解为快递员自动给你签收了并放到了快递柜中。当然还有手动签收,也就是见到快递员,开箱验货,再签收的意思。自动签收(默认):Session.AUTO_ACKNOWLEDGE。手动签收:Session.CLIENT_ACKNOWLEDGE,客户端...原创 2020-01-03 06:57:16 · 279 阅读 · 0 评论 -
ActiveMQ笔记31-消息有事务模式下消费者签收介绍
将生产者和消费者代码中的事务再次开启,记得加session.commit();然后将消费者的签收模式改为手动签收,故意不写acknowledge()方法的调用,启动生产者,启动消费者,这时候,消费者可以拿到消息,再次启动消费者,却不会出现重复消费的情况,这是为什么呢?我们可以理解为执行了提交操作,也就告知了MQ,消费者已经完成了签收,这里的CLIENT.ACKNOWLEDGE也就相当于AUTO_A...原创 2020-01-03 07:13:24 · 309 阅读 · 0 评论 -
ActiveMQ笔记32-点对点和发布订阅小总结
点对点模型是基于队列的,生产者发送消息到队列,消费者从队列取消息,队里的存在使得消息的异步传输称为可能。类似于发短信。如果session关闭时,有部分消息被收到但是还没有被签收(acknowledge),当消费者下次再连接到相同队列的时候,消息会被再次接收。队列可以长久的保存消息直到消费者接收到消息,消费者不需要因为担心消息会丢失而时刻保持会话持久连接,充分体现了异步传输模式的优势。J...原创 2020-01-03 07:49:07 · 207 阅读 · 0 评论 -
ActiveMQ笔记33-按照不同的配置文件来启动
Broker相当于一个ActiveMQ服务器的实例。它是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java代码中,以便随时使用和启动。可以实现懒加载,在用到的时候才去启动,节省资源,保证可靠性。之前,我们在Linux下启动ActiveMQ的时候,通过./activemq start的方式启动,启动之后,ActiveMQ会去读取conf路径下的activemq.xml文件来加载资源,现在...原创 2020-01-03 08:22:59 · 181 阅读 · 0 评论 -
ActiveMQ笔记34-ActiveMQ的Broker
用ActiveMQ Broker作为独立的消息服务器来构建Java应用。ActiveMQ也支持在虚拟机中通信基于嵌入式的Broker,能够无缝的集成其他Java应用。更新pom.xml,引入FastJson先关jar包。创建EmbedBroker类。<!--FastJson--><dependency> <groupId>com.faster...原创 2020-01-03 21:22:22 · 494 阅读 · 0 评论 -
ActiveMQ笔记35-Spring整合ActiveMQ之队列生产者
pom.xml添加Spring相关的坐标,完整内容如下所示。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...原创 2020-01-04 10:56:10 · 225 阅读 · 0 评论 -
ActiveMQ笔记36-Spring整合ActiveMQ之队列消费者
Spring相关配置文件参考前面这篇博客,这里就不重复写了:https://blog.youkuaiyun.com/qq_36059561/article/details/103830447创建SpringMQ_Consumer类,代码如下。package com.wsy.spring.activemq;import org.springframework.beans.factory.annot...原创 2020-01-04 11:10:34 · 190 阅读 · 0 评论 -
ActiveMQ笔记37-Spring整合ActiveMQ之主题生产消费
Spring相关配置文件参考前面这篇博客,这里就不重复写了:https://blog.youkuaiyun.com/qq_36059561/article/details/103830447要用到队列,需要先修改applicationContext.xml文件,添加一个主题的bean,将jmsTemplate的defaultDestination属性值换做topic的id即可。<!--主题的目...原创 2020-01-04 11:42:05 · 271 阅读 · 0 评论 -
ActiveMQ笔记38-Spring整合ActiveMQ之监听器配置
Spring相关配置文件参考前面这篇博客,这里就不重复写了:https://blog.youkuaiyun.com/qq_36059561/article/details/103830447在applicationContext.xml配置文件中添加如下代码,添加MyMessageListener类,代码如下。<!--配置监听程序--><bean id="jmsContainer...原创 2020-01-04 12:32:46 · 269 阅读 · 0 评论