RabbitMQ——镜像队列的数据流

【概述】

rabbitmq采用了镜像队列的方式实现队列的高可用,镜像队列的使用、配置、内部实现原理网上有很多文章都有介绍,自己很久之前也曾总结过相关内容。但回过头再来看镜像队列,仍然有新的发现,本文分析总结了镜像队列生产消费的数据流以及节点流量,以便更好的使用镜像队列。

【生产消费的数据流】

分析镜像队列之前,我们还是先一步步从单机情况下,集群情况下看看生产消费的数据流走向是怎样的,最后再分析镜像队列的场景。

  • 单机场景:

如上图所示,生产者,消费者连接到rabbitmq后,在rabbitmq内部会创建对应的connection,channel进程。connection进程从socket上接收生产者发送消息后投递到channel进程;在channel进程中,根据消息发送的exchange与消息的routing-key,在内部数据库的路由表中,查找所有匹配的队列的进程PID,然后将消息投递到这些队列的进程中。

同样,队列进程收到消息后,找到消费者对应的channel进程PID,然后将消息投递给该进程,channel进程再发送给对应的connection进程,然后通过socket发送给消费者。

从上面可以看出,一条消息从生产到消费,rabbitmq的节点上会有1进1出的流量。

补充说明下:在rabbitmq内部会为每个tcp链接创建多个进程,其中包括专门用于数据接收的rabbit_reader进程,专门用于数据发送的rabbit_writer进程,本文为了方便表达,统一使用connection进程进行socket数据的收发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值