
rabbitmq
文章平均质量分 86
往前的
这个作者很懒,什么都没留下…
展开
-
第36篇 rabbitmq DefaultCredentialsRefreshService 源码分析
默认的凭证的刷新服务,类似token失效,它是一个周期性的服务, token续约的服务, 使用Function <Duration, Long> refreshDelayStrategy, 一旦凭证提供者已经续约了,将会回调注册,重新发送一个新的秘密到AMQP的连接 , 这里也使用构造器模式DefaultCredentialsRefreshService 实现了CredentialsRefreshService接口1、CredentialsRefreshService 接口凭证续.原创 2021-08-11 23:00:26 · 649 阅读 · 0 评论 -
第35篇 rabbitmq ChannelN源码分析
最主要上级的与AMQP协议功能的实现,实现所有通道编号(除了编号为0通道)1、成员和静态变量名称默认值描述final String UNSPECIFIED_OUT_OF_BAND“”final Map<String, Consumer> _consumersCollections.synchronizedMap消费者mapfinal Collection returnListenersnew CopyOnWriteArrayList()返回监.原创 2021-08-11 22:58:14 · 403 阅读 · 0 评论 -
第34篇 rabbitmq AMQChannel源码分析
上一篇稍微了解一下Channel, 本节我们来了解一下AMQChannel抽象类这个类是AMQ通道基础类, 它继承了ShutdownNotifierComponent类文章目录1、ShutdownNotifierComponent 类1.1、成员变量或常量1.2、方法2、AMQChannel 抽象类2.1、成员变量或常量2.2、方法2.3、图示3、内部类和接口3.1、 RpcContinuation接口3.1.1、方法3.2、BlockingRpcContinuation implements Rp原创 2021-07-12 22:26:02 · 334 阅读 · 7 评论 -
第33篇 rabbitmq AMQConnection源码分析
做了这么多准备工作,终于可以看一下AMQConnection源码了,可以看到整个指令运行和整体准备工作,在通道中真正干活的。没错开干对于Connection可以参考第6篇Connection源码分析文章目录1、NetworkConnection2、ShutdownNotifierComponent 类2.1、成员变量或常量2.2、方法3、AMQConnection类3.1、成员变量和常量3.2、方法3.3、图示1、NetworkConnection网络连接接口方法名描述.原创 2021-07-12 22:24:26 · 389 阅读 · 0 评论 -
第32篇 rabbitmq RecordedExchange重试和恢复源码分析
继续第31篇,说到ConnectionParams 连接参数,主要超时时间,执行器,处理器,监听器,还遗留两个TODO,就是恢复RecordedXXXX RetryXXX ,哪些记录需要恢复和重试恢复动作结果文章目录1、RecordedXXX1.1、RecordedEntity1.2、RecordedBinding1.3、RecordedQueueBinding1.4、RecordedExchangeBinding1.5、RecordedNamedEntity1.6、RecordedExchange1.原创 2021-07-12 22:22:36 · 213 阅读 · 0 评论 -
第31篇 rabbitmq ConnectionParams源码分析
继续分析AMQConnection发现有个ConnectionParams类,这里就是连接相关的参数文章目录1、成员变量2、总结附录1 CredentialsProvider附录2 SaslConfig附录3 RecoveryDelayHandler(接口)3.1、DefaultRecoveryDelayHandler3.2、ExponentialBackoffDelayHandler(指数超时)附录4 ErrorOnWriteListener(接口)附录5 TopologyRecoveryFilte.原创 2021-07-12 22:20:47 · 342 阅读 · 0 评论 -
第30篇 rabbitmq ChannelManager源码解析
在分析AMQConnection ,里面需要ChannelManager使用,顺便看一下ChannelManager源码文章目录1、成员变量2、方法2.1、ChannelManager构造方法2.2、 void handleSignal(final ShutdownSignalException signal)2.3、ChannelN createChannel1、成员变量变量名称默认值描述final Object monitornew Object()加锁的对象f.原创 2021-07-12 22:19:09 · 255 阅读 · 0 评论 -
第29篇 rabbitmq BitSet源码分析
上节IntAllocator是对于BitSet的应用,我们来具体学习BitSet源码默认情况下所有bit初始化都是false不能设置null值不是线程安全的,需要外层做同步BitSet实现Cloneable 和 Serializable接口(说明它具有克隆和序列化功能)BitSet被打包成"字"数组,目前一个字是一个long, 由64位组成,需要6个地址位,也就移动1<<6==64二进制表示0或1,long是8byte, 64bit,也就是一个long.原创 2021-07-08 20:39:23 · 192 阅读 · 1 评论 -
第28篇 rabbitmq IntAllocator 源码分析
int类型数值分配类, 不是线程安全的1、成员变量变量名默认值描述final int loRangefinal int hiRangefinal int numberOfBitshiRange-logRange (数字个数)int lastIndex0搜索free的数字final BitSet freeSet表示某个数字是否被分配了2、方法方法名称描述图示IntAllocator(int bottom, .原创 2021-06-30 22:45:14 · 207 阅读 · 3 评论 -
第27篇 rabbitmq BlockingCell源码分析
我们继续为AMQConnection扫盲,另一个成员变量类BlockingCell ,阻塞元件,一次性写入,到处使用。它是一个简单one-shot IPC机制,这个是一个地方缓存区,一旦填满就不能清除,也不能设置新的值1、成员变量和常量名称默认值描述boolean _filledfalse表示某个值是否填充了标记T _value就填充值变量final long NANOS_IN_MILLI1000L*1000L1毫秒对应纳秒final lon.原创 2021-06-24 08:33:38 · 249 阅读 · 2 评论 -
第26篇 rabbitmq HeartbeatSender源码分析
开始看AMQConnection源码,这个也是一个比较大的类,首先我需要扫描相关的类,就是这个类相关成员变量,这篇主要解决HeartbeatSender, 看类名就知道是心跳发送类,具体看一下有什么方法和值得学习的地方它是为一个AMQConnection管理和发送心跳检测,它线程独立于Connection工作线程,两者互不干扰它是一个final类1、 成员变量和常量变量名和常量名默认值描述final Object monitornew Object()同步锁.原创 2021-06-24 08:32:46 · 250 阅读 · 2 评论 -
第25篇 rabbitmq AMQCommand源码分析
上篇已经介绍如何将Frame拼装成一个整体,其实就是Command,我们了解一下Command中代码,理解它职责是做啥的其实类图也比较简单,Command接口,然后一个AMQCommand实现1、Command接口我们思考一下一个完成http请求,需要什么参数,请求头,请求方式,请求内容,这里其实也是类似1.1、方法仔细发现一下其实就是上篇CommandAssembler的成员变量方法名描述Method getMethod方法指令(一定会有数据的.原创 2021-06-22 23:00:35 · 211 阅读 · 1 评论 -
第23篇 rabbitmq AMQImpl源码分析
算是终于去看到AMQImpl源码,也就具体Method实现,AMQP一些指令做一些了解,第16篇你可以了解AMQP接口源码,有个大致了解第16篇 AMQP接口源码1-8 就是具体Method的指令的实现,具体目标就是实现Method 和 Frame互转9-10,遍历属性类,目前是不支持遍历11 Frame (DataInputStream)–> Method, 将具体流变成指令方法 (使用MethodArgumentWriter/Reader)12 Frame.原创 2021-06-22 08:28:54 · 342 阅读 · 3 评论 -
第24篇 rabbitmq CommandAssembler源码分析
算是终于去看到AMQImpl源码,也就具体Method实现,AMQP一些指令做一些了解,第16篇你可以了解AMQP接口源码,有个大致了解第16篇 AMQP接口源码1-8 就是具体Method的指令的实现,具体目标就是实现Method 和 Frame互转9-10,遍历属性类,目前是不支持遍历11 Frame (DataInputStream)–> Method, 将具体流变成指令方法 (使用MethodArgumentWriter/Reader)12 Frame.原创 2021-06-22 08:24:24 · 173 阅读 · 0 评论 -
第22篇 rabbitmq MethodArgumentReader(MethodArgumentWriter)源码分析
MethodArgumentReader和MethodArgumentWriter也是对于ValueReader和ValueWriter的封装,其实跟ContentHeaderPropertyReader和ContentHeaderPropertyWriter类似的,只是读写内容不同,ContentHeaderProperty是基础属性,而MethArgument读写AMQP的协议指令(Method具体实现),比如说队列声明,发布消息等,我们来具体看一下它与ContentHeaderPropertyWri.原创 2021-06-20 13:23:35 · 122 阅读 · 0 评论 -
第21篇 rabbitmq前阶段回顾和复习(第9篇到第20篇)
这一节主要是对于这周学习的复习和总结,第14篇到第21篇,以及它们之间的联系串一下,也算整理一下学习东西,也是将零星学习东西类似拼图一样形成一个局部的小块文章目录1、复习2、画个图描述一下3、总结1、复习其实这会分析源码是自底向上,我们是以第9篇WorkPool(工作池,所有任务存储地方),WorkPool使用LinkedBlockingQueue(JDK的链表队列)感兴趣分析一下,分析完LinkedBlockingQueue,在往上看就是第12篇 ConsumerWorkService(创建具.原创 2021-06-19 16:18:47 · 125 阅读 · 0 评论 -
第20篇 rabbitmq ContentHeaderPropertyReader源码分析
第18篇和第19篇了解最基础的ValueWriter 和 ValueReader对不同类型的数据编码的字节数组中有一定了解,我们现在往上看一下使用ValueWriter和ValueReader的类,我先看一下ContentHeaderPropertyReader和ContenHeaderPropertyWriter文章目录1、ContentHeaderPropertyReader1.1、成员变量1.2、方法1.3、flagWord描述1.4、图示2、ContentHeaderPropertyWrite.原创 2021-06-18 21:24:21 · 152 阅读 · 2 评论 -
第19篇 rabbitmq ValueReader源码分析
上一篇我看一下ValueWriter方法,这节我熟悉一下逆过程,读取数据ValueReader是ValueWriter逆过程,读取流中数据对于类型简写可以参考rabbitmq ValueWriter源码分析文章目录1、成员变量2、方法2.1、图示3、TruncatedInputStream 类3.1、成员变量3.2、方法4、总结1、成员变量变量名默认描述long INT_MASK0xffffffff掩码二进制表示(1111 1111 1111 1111 1111 .原创 2021-06-18 21:22:10 · 121 阅读 · 0 评论 -
第18篇 rabbitmq ValueWriter源码分析
我们在创建Frame(数据帧)时候,需要将一些属性写入到Frame accumator中,也就是ByteArrayOutputStream中,我们首先熟悉一下ValueWriter类大概了解一下其实它对DataOutputStream一个封装,套一层1、成员变量成员变量默认值描述final DataOutputStream对象输出流final int COPY_BUFFER_SIZE4096复制buffer大小2、方法方法名描述图.原创 2021-06-17 23:10:28 · 244 阅读 · 4 评论 -
第17篇 rabbitmq BasicProperties 源码分析
上一级分析一下rabbitmqAMQP接口的源码,AMQP接口源码中还有一个BasicProperties内部类没有仔细分析,这节做这件事情,让我们开始1、Cloneable (克隆)复制,它是一个形容词,具备某种能力,这个接口没有具体的方法,代表它具有克隆对象功能2、ContentHeader 接口内容头部接口2.1、方法方法名描述int getClassId获取类idString getClassName获取类名称void append.原创 2021-06-17 23:09:25 · 564 阅读 · 2 评论 -
第16篇 rabbitmq AMQP接口类源码分析
上面了解一下Method接口和Method抽象类,我们再来了解一下AMQP接口,这个也是AMQP接口确认文章目录1、常量2、 内部类2.1、总结2.2、单个接口方法拆开(以Start为例)2.3、BasicProperties 类大概看一下AMQP接口,分两部分常量部分和静态内部类1、常量常量名值描述PROTOCOL.MAJOR0AQMP协议主版本为0PROTOCOL.MINOR9AQMP协议次版本为9PROTOCOL.REVISION1AQMP.原创 2021-06-16 23:08:15 · 898 阅读 · 5 评论 -
第15篇 rabbitmq Method抽象类源码分析
其实第14篇已经说了channel源码情况,准备看一下AMQChannel源码,发现有很多依赖其他类,先熟悉一下其他关键类的源码, 我们来熟悉一下Method方法AMQP方法对象的基类,具体实现在AMQP.java 类中文章目录1、 Method接口1.1、方法2、Method 抽象类2.1、方法2.2、图示2、总结1、 Method接口1.1、方法方法名描述int protocolClassId协议的classidint protocolMethodId.原创 2021-06-16 23:06:47 · 206 阅读 · 0 评论 -
第14篇 rabbitmq Channel接口源码
上节第13篇写了 ConsumerDispatcher, 查询到使用地方是ChannelN类,如下所示,由于Channel内容比较多就先看一下Channel源码1、Channel 接口channel实例不在线程间共享,应用应该一个channel一个线程,如果不是一个channel一个线程,虽然通道上的某些操作可以安全调用,但是同时导致不正确的帧交错,线程间共享通道也会干扰发布者确认1.1、接口方法方法名方法描述int getChannelNumber获取通道号.原创 2021-06-15 22:21:07 · 348 阅读 · 3 评论 -
第13篇 rabbitmq ConsumerDispatcher源码分析
第9到12篇熟悉工作线程池和使用和触发工作线程池的服务ConsumerWorkService类,上面它们是不关心任务是什么,只管干活,那么谁知道是什么任务,或者受到rabbitmq服务器的消息,谁去判断是什么?有组装什么任务呢?这个就我们这篇要解析ConsumerDispatcher, 就是派发工作的包工头。它也是一个final修饰的普通类看类描述,它分派和通知内部管理执行器服务和工作池进行工作的,且每个通道有一个ConsumerDispatcher服务,你可以想象一下每个水管都套转接头, 但是执.原创 2021-06-11 21:55:36 · 444 阅读 · 0 评论 -
第12篇 rabbitmq ConsumerWorkService源码分析
其实第9篇已经写了WorkPool 工作池 ,了解workPool里面源码,以及使用LinkedBlockingQueue源码,也算是对blocking队列熟悉, 这节熟悉WorkPool调用方ConsumerWorkService ,顾名思义就是消费者的工作服务,因为write一般是实时写操作,消费需要多个线程,顺便透露一下ConsumerWorkService还有一个ConsumerDispatcher 分发器,不同消息做不同分发,进入正题ConsumerWorkService是一个final类.原创 2021-06-10 22:13:52 · 477 阅读 · 5 评论 -
第11篇 rabbitmq使用LinkedBlockingQueue源码解析(下篇)
上篇介绍LinkedBlockingQueue的依赖接口和抽象情况,这节看一下LinkedBlockingQueue本身文章目录1、内部类1.1、Node 简单定义一下链表结构,只有后驱节点1.2、Itr implements Iterator 迭代器1.2.1、构造方法1.2.2、成员变量1.2.3、方法1.2.4、图示1.3、LBQSpliterator implements Spliterator1.3.1、成员变量1.3.2、构造函数1.3.3、Spliterator接口2、成员变量3、方.原创 2021-06-10 22:11:53 · 416 阅读 · 0 评论 -
第10篇 rabbitmq LinkedBlockingQueue(上篇)
这节主要分析和学习LinkedBlockingQueue队列特性,具体类图如下,我们理解它如何实现阻塞, 主要研究LinkedBlockingQueue的父类依赖抽象类和接口解析1、分析上图队列是集合的一种BlockingQueue接口却不继承AbstractQueue 也说明它不同于一般的队列,也就在普通队列增加新特性一样(类似马添加翅膀的属性,它就具有飞功能)它还实现Serializable接口说明具有在中网络传递该对象功能,支持序列化和反序列化Iterable接口 需要实现 迭代器功.原创 2021-06-09 22:19:50 · 576 阅读 · 4 评论 -
第9篇 rabbitmq WorkPool源码解析
消费者消费消息它有一个工作池的概念,所以现在研究一下WorkPool的源码,看一看可以学到什么技巧。这个实现是一个线程安全的类WorkPool<K,W> K : 客户端类型, W : 工作项目类型1、成员变量MAX_QUEUE_LENGTH = 1000 队列最大为1000ready = new SetQueue() 准备好客户端inProgress = new HashSet() 正在处理客户端Map<K, VariableLinke.原创 2021-06-08 22:25:30 · 402 阅读 · 8 评论 -
第8篇、rabbitmq处理读取socket逻辑细节(源码)
这篇紧接着第7篇,有些执行socket细节过程需要细细研究(也就 标记为A、B、C、D),就如下图1、doFinalShutdown() 做最后关闭 (A)如下图示总结关闭socketinterrupt mainloop (也就监听主线程)通知所有关闭监听器(shutdownCompleted方法)哪些监听器需要重新恢复监听2、FrameHandler#readFrame (读取socket)com.rabbitmq.client.impl.Frame#rea.原创 2021-06-08 22:23:26 · 489 阅读 · 0 评论 -
第7篇 rabbitmq 创建SocketFrameHandler
本节主要是熟悉socketFrameHandlerFactory类, 真正涉及到socket流处理器展示如下类图(我们本文关心是SocketFrameHandlerFactory 和SocketFrameHandler),由类图可以知道SocketFrameHandlerFactory继承抽象类AbstractFrameHandlerFactory, 抽象类实现FrameHandlerFactory接口1、FrameHandlerFactory (顶级接口)你可以看到它只有一个方法创建F.原创 2021-06-07 21:47:36 · 679 阅读 · 3 评论 -
第6篇、rabbitmq客户端Connection接口(源码分析)
这篇主要了解一下Connection接口设计和思考1、简单使用示例ConnectionFactory factory = new ConnectionFactory();factory.setHost(hostName);factory.setPort(portNumber);factory.setVirtualHost(virtualHost);factory.setUserName(username);factory.setPassword(password);Connectio.原创 2021-06-04 19:40:46 · 690 阅读 · 2 评论 -
第5篇、rabbitmq客户端ConnectionFactory的ThreadFactory
既然看到ConnectionFactory中有使用jdk自带ThreadFactory类,我想研究一下它源码,浅尝辄止,也就是如下这一行代码private ThreadFactory threadFactory = Executors.defaultThreadFactory();1、ThreadFactory它一个接口且只有一个newThread方法,传入一个Runnable参数它设置作用就是避免硬调用new Thread方法, 同时也可以做一下控制最简.原创 2021-06-04 19:39:02 · 551 阅读 · 0 评论 -
第4篇、rabbitmq客户端ConnectionFactory(源码解析)
这篇文章主要熟悉一下rabbitmq客户端的核心类ConnectionFactory,主要会从几个方面入手,成员变量整理和核心方法整理,得出它们核心能力,做一些实践验证1、成员变量整理fielddefault(默认)含义virtualHost/虚拟主机概念(隔离消息能力)port-1端口号(默认端口号非ssl为5672,ssl为5671)hostlocalhost主机地址requestedChannelMax2047最大通道数,2047 因.原创 2021-06-04 19:37:35 · 1939 阅读 · 1 评论 -
第3篇、rabbitmq 发送消息源码(简析)
这篇主要研究一下rabbitmq的发送消息客户源码分析,先给出大概图由上面图可以看出 ConnectionFactory–> Connection–> Channel–> push message, 将一步一步分析。1、创建工厂类构造函数没有入参,且里面配置很多默认参数,具体一些重要参数fielddefault(默认)含义virtualHost/虚拟主机概念(隔离消息能力)hostlocalhost主机地址port-1.原创 2021-06-03 21:51:13 · 413 阅读 · 2 评论 -
第2篇 rabbitmq helloworld入门(java版)
这一部分注意学习一下java版 rabbitmq hello客户端。1、先决条件假设您已经安装并且运行rabbitmq在localhost,端口为5672,如果您使用host,端口或证书不是默认的就需要在配置做相应调整可以先看一下和做好准备工作 rabbitmq的安装和启动(brew),后面有用到创建queue和vhost2、简介rabbitMq类似邮局,只是与邮局不同的是它不处理数据,只是接收,存储,转发二进制数据。producer(生产者)无非就是发送,发送消息的程序是生产者,用P.原创 2021-06-03 19:15:40 · 206 阅读 · 1 评论 -
第1篇 rabbitmq的安装和启动(brew)
rabbitmq的安装, brew方式文章目录1、更新最新版本brew2、执行安装3、启动和关闭rabbitmq4、WEB的UI控制台5、命令行创建exchange和queue5.1、创建虚拟主机5.2、创建exchange(交换器)5.3、创建Queue(队列)5.4、exchange和queue进行绑定5.5、发送消息验证的一下5.5、获取消息6、总结和回顾1、更新最新版本brewbrew update然后它会提示你执行如下语句Error: homebrew-core i.原创 2021-06-02 22:00:44 · 1271 阅读 · 2 评论