RabbitMQ
文章平均质量分 87
zhihui_jiao
这个作者很懒,什么都没留下…
展开
-
RabbitMQ源码分析 - 启动
RabbitMQ是一个消息队列的实现,基于AMQP(Advanced MessageQueuing Protocol)。最近因为工作需要,打算深入了解RabbitMQ的架构以实现,后续会出一系列文章记录分析过程。这篇总结RabbitMQ的启动过程。(注:分析代码基于RabbitMQ 2.8.2) RabbitMQ的启动入口在[$RABBIT_SRC/src/...2012-05-24 19:41:36 · 492 阅读 · 0 评论 -
RabbitMQ源码分析 – 网络层
(注:分析代码基于RabbitMQ 2.8.2) 网络层的启动也是作为上一篇文章中提到的一个启动步骤来启动的,入口为[$RABBIT_SRC/src/rabbit_networking.erl -->boot/0],代码如下:boot() -> ok = start(), ok = boot_tcp(), ok = boot_ssl()....原创 2012-05-30 13:31:06 · 554 阅读 · 0 评论 -
RabbitMQ源码分析 – 实体初始化
(注:分析代码基于RabbitMQ 2.8.2)Connection在上篇文章中提到,客户端连上rabbit后,需要向rabbit发送AMQP协议头,rabbit在收到协议头后,开始在0号channel 上跟客户端进行交互(AMQP中一个连接可以多路复用,1~65535为可用的channel编号,0号channel,也就是frame中channel的索引为0,被认为是全局于整个连接)。...2012-06-11 16:15:05 · 474 阅读 · 0 评论 -
RabbitMQ源码分析 – 消息生命周期
(注:分析代码基于RabbitMQ 2.8.2)当客户端通过basic.publish命令(AMQP定义)发布一个消息时,rabbit需要经过以下几个步骤处理消息:1) 根据客户端传来的消息内容及相关属性(目标exchange,routing keys,mandatory及immediate属性)构造一个消息实体;2) 根据要投递的exchange及routing keys匹配消息的目...2012-06-25 10:53:22 · 757 阅读 · 0 评论 -
RabbitMQ源码分析 - 队列机制
(注:分析代码基于RabbitMQ 2.8.2)当rabbit无法直接将消息投递到消费者时,需要暂时将消息入队列,以便重新投递。但是,将消息入队列并不意味着,就是将消息扔在一个队列中就不管了,rabbit提供了一套状态转换的机制来管理消息。 在rabbit中,队列中的消息可能会处理以下四种状态:alpha:消息内容以及消息在队列中的位置(消息索引)都保存在内存中;beta...原创 2012-07-09 10:10:58 · 444 阅读 · 0 评论 -
RabbitMQ源码分析 – 持久化机制
(注:分析代码基于RabbitMQ 2.8.2) 当消息需要持久化(相应队列首先必须是durable)或者因为内存吃紧,需要把消息转移到磁盘的时候就会触发持久化操作。Rabbit中两部分信息涉及到持久化操作:一个是消息本身,由msg_store模块负责([$RABBIT_SRC/src/rabbit_msg_store.erl]),另一个是消息在队列中的位置,由queue_index模块负责(...2012-08-21 09:34:24 · 422 阅读 · 0 评论