
activemq
jzq114
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ActiveMQ源码分析之开篇
时间如白驹过隙,一眨眼的功夫距离上次写博客的时间已经过去两年多了。为了回馈广大顾客,决定将最近整理的东西分享给大家,哈哈哈。虽然年龄已经不小,但还是要保持年轻,乐观的心态。最近将ActiveMQ源码涉猎了下,虽然这款MQ中间件年龄已经比较大了,而且市面上也出现了很多更优秀的MQ产品,如kafka,RocketMQ,RabbitMQ等。但是仍然有较多厂商在使用ActiveMQ,而且关于AMQ(以下A...原创 2019-04-07 18:22:44 · 288 阅读 · 0 评论 -
ActiveMQ源码分析之Producer发送消息
AMQ源码分析基于5.15.6版本,先来段Producer连接Broker的demo。public class Sender { private static final int SEND_NUMBER = 1; public static void main(String[] args) { ConnectionFactory connectionFa...原创 2019-04-07 23:28:54 · 601 阅读 · 0 评论 -
ActiveMQ源码分析之Producer接收消息
ActiveMQ有三种消息发送方式,同步(syncSendPacket)、异步(asyncSendPacket)、单向(doOnewaySend)同步:发送者发送消息给Broker,同步等待,当前线程会阻塞,直到Broker返回应答信息。异步:发送者发送消息给Broker,消息发送线程不阻塞,继续执行下面的逻辑。由其他线程处理Broker返回的应答信息。单向:发送者发送消息给Broke...原创 2019-04-12 23:25:33 · 472 阅读 · 0 评论 -
ActiveMQ源码分析之Producer与Broker交互
AMQ生产者和Broker交互完整流程如下图。该图完整的描述了Producer发送消息时和Broker的整个交互流程。由于该过程交互较多,可以将整个流程分为三个部分。1、第一部分为Producer和Broker建立连接,包括发送WireFormatInfo,ConnectionInfo,ConsumerInfo,SessionInfo,ProducerInfo等信息。2、第二部...原创 2019-05-01 23:15:27 · 584 阅读 · 0 评论 -
ActiveMQ源码分析之KahaDB消息存储
KahaDB是ActiveMQ从版本5.4之后的默认消息存储引擎,消息存储机制是消息中间件最重要的核心部件和性能提升点。KahaDB的存储主要分为索引存储和消息存储部分。KahaDB的索引是B+树,而其最基础的存储机制则是基于“随机存取文件”设计的。相对于连续存储的文件来说这种方式比较耗时,但是设计思路比较简单。相对的,Kahadb的消息即数据存储机制则是基于“连续存储”文件设计的,这种存...原创 2019-05-04 17:30:04 · 962 阅读 · 0 评论 -
ActiveMQ源码分析之KahaDB索引存储
前一篇我们分析完了KahaDB消息的存储机制,接下来将分析KahaDB的索引存储机制,跟索引存储相关的文件有*.data,*.redo,*.free。当Broker接收到Producer发送的消息数据之后将会将消息存储起来,而当Producer发送提交事务命令的时候,Broker会为刚才保存的消息生成对应的索引,存储在KahaDB中,以提升消息读取的效率。Broker接收到的事务信息如下:...原创 2019-05-04 23:04:43 · 689 阅读 · 0 评论 -
ActiveMQ源码分析之Queue消费者
ActiveMQ中有两种消费模式,Queue(点对点)和Topic (发布/订阅),存储模式也分为非持久化和持久化。由于使用非持久化存储消息只会存储在内存中,容易造成消息丢失,实际生产环境中使用较少,因此重点介绍持久化下Queue消费。Queue模式下,允许同时有多个消费者,但是一条消息只会被其中一个消费者消费一次,ActiveMQ是如何实现这种机制的呢?我们先从Broker获取消费者需要的消...原创 2019-08-05 00:58:49 · 650 阅读 · 1 评论 -
ActiveMQ源码分析之消息确认
ActiveMQ中消息只有在被Broker确认之后才能认为被成功消费。消息的成功消费通常包括三个阶段:1、客户端接收消息,2、客户端处理消息,3、Broker确认消息。其中第2阶段和第3阶段的顺序根据客户端接收消息的方式而定。如果客户端采用receive的方式接收,则阶段2和阶段3是异步执行的,也就是说用户在真正处理消息之时,Broker可能已经确认完了。客户端如果采用listener的方式,则客...原创 2019-08-11 02:19:46 · 722 阅读 · 1 评论