RabbitMQ理论学习

本文介绍了RabbitMQ的三种交换机类型:Direct Exchange、Topic Exchange和Fanout Exchange。Direct Exchange按RouteKey将消息发送到指定队列,Topic Exchange支持模糊匹配路由,Fanout Exchange将消息广播到所有绑定的队列。此外,还提到了临时队列和绑定在消息传递中的作用。
摘要由CSDN通过智能技术生成

1. 生产者:Producer

        

2. 消费者:Consumer

3. 队列


注:一般是将使用默认的exchange(名字是空字符),默认exchange直接发送指定queue,其实实际原理只这样:


具体操作:
发送(send
 
接受(receiving)



RabbitMQ 任务分发机制
原理:

RabbitMQ Server需要一定的分发机制来balance每个load

Message acknowledgement 消息确认(处理完消息发送ack)原理:



Message durability消息持久化 :
为了保证RabbitMQ退出或Crash了数据仍没有丢失


Fail dispatch 公平分发 :

queue 在接受该Consumer的ack前,它不会将新的Message给它,prefetch代表每个Consumer在同一时间最多处理一个Message


RabbitMQ 分发到多Consumer 原理


如果通过Exchange放到多个queue中,这个分发rule通过Exchange定义

三种类型的解释:

一.Direct Exchange

任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue

1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。

2.这种模式下不需要将Exchange进行任何绑定(binding)操作

3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

Topic Exchange

任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上

1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注 主题能与RouteKey模糊匹配的队列。

2.这种模式需要RouteKey,也许要提前绑定Exchange与Queue。

3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发 到该队列)。

4.“#”表示0个或若干个关键字,“*”表示一个关键字。如“log.*”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹 配。

5.同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。


三.Fanout Exchange 

任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。

1.可以理解为路由表的模式

2.这种模式不需要RouteKey

3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。

4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。


Temporary queue(临时消息队列)

每当Consumer连接时,我们需要一个新的,空的queue。因为我们不对老的log感兴趣。如果在声明queue时不指定名字,那么RabbitMQ会随机为我们选择这个名字。

1、Consumer连接时需要空的queue

2、当Consumer关闭连接时,这个queue要被deleted


Binring 绑定:


创建了fanout类型的exchange和没有名字的queue(实际上是RabbitMQ帮我们取了名字)。那exchange怎么样知道它的Message发送到哪个queue呢?答案就是通过bindings:绑定。


最终实现:


以上是个人理解加参照大牛博客所写,有什么问题希望指出。


今日心得:我可以爬的像乌龟一样慢,但是稳,依然能到终点!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值