RabbitMQ收发消息流程图


好像好久没写东西了,时隔三年回来写点东西,发现自己竟然跑偏了

大学时还整天想做图形方面的,怎么出来工作后走着走着就走弯了呢.....好悲伤...

​-------------------------------------------------------------------------------------------

​关于RabbitMQ,是一个由erlang实现的Message Queue,只要是在程序之间管理消息通信,想具体了解的同学可以出门左拐上百度 

这里主要是画个流程图,便于理解RabbitMQ的消息流程

Message​ Queue 模型中,向MQ发送消息的程序称为生产者,从MQ读取消息的是消费者

先说一下RabbitMQ的各个组件​

程序和RabbitMQ之间的连接是通过channel,channel是基于TCP协议之上的​,一个TCP连接可以有多个channel

RabbitMQ内具体分为Queue(队列)、Exchange(交换机)和Binding(绑定) 

Exchange是多个Binding的集合,​每条发送到RabbitMQ的消息都会带有一个routing key ,RabbitMQ根据bingding来匹配routing key,把消息发送到符合​规则的Queue,Exchange也可以有多个,生产者在发送消息的时候可以指定消息由哪个exchange来排遣,exchange并不是一个实体的线程,而是依附在Queue上的一些规则,只是一些逻辑处理,所以并不需要为了使用多线程而创建多个相同​exchange,这样并不能使RabbitMQ更快。

Queue负责保存和分发接收到的消息,每个Queue都能有多个消费者连接​,Queue每次收到消息后,都会选择一个消费者进行转发,转发成功后再将消息从本地移除。每个Queue都是一个独立的线程。


然后上流程图

RabbitMQ流程图


1. 生产者产生一条消息,通过channel发向RabbitMQ,RabbitMQ收到消息后,根据​​消息指定的exchange(交换机) 来查找binding(绑定) 然后根据规则分发到不同的Queue

2.Queue将消息转发到具体的消费者。

3.a.消费者收到消息后,会根据自己对消息的处理对RabbitMQ进行返回,如果返回Ack,就表示已经确认这条消息,RabbitMQ会对这条消息进行处理(一般是删除)

3.b.如果消费者收到消息后处理不了,或者崩溃了,就可能不能对RabbitMQ做出返回,或者拒绝对消息处理,返回reject,RabbitMQ在一定时间没收到返回或者收到reject后,会重新派遣消息。

整个消息传递模型中,生产者只需要指定规则,然后发出消息就行,不需要知道最后是哪个消费者收到了消息,也不需要操心消费者是否收到消息,只需要往RabbitMQ发送消息就行了。

挺多地方讲的都不详细,只是大概提一下流程,为了更方便理解,如果想要更深入的同学建议去坚强哥的博客看看 http://www.cnblogs.com/me-sa/archive/2012/10/20/RabbitMQ_VHost_Exchanges_queues_bindings_and_Channels.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值