SpringBoot高级消息-RabbitMQ运行机制

RabbitMQ的核心运行机制,首先在我们高级消息队列的路由机制,这个和JMS是有大差别的,他给我们增加了Exchange和Bindding,

Exchange就是我们介绍的交换器,和Binding绑定的路由规则,那我们一个消息是如何从一个生产者到消费者呢,它是这样的,

首先我们这个生产者,他给我们生产了一个消息,准备发布到哪个队列上,我们生产者先把消息发给Broker,也就是我们的消息代理,

也就是我们的服务器,而这个服务器呢,收到消息以后,他把这个消息,给到一个合适的交换器,这个交换器呢,它是和我们这个消息队列

来进行绑定的,我们服务器中有非常多的交换器,有非常多的消息队列,消息给交换器以后,交换器根据消息携带过来的路由件,来判断,

我是要交给你这个队列,还是交给这个队列,还是交给这个队列,还是我一起都交给他们,交换器通过这个绑定规则,交给队列以后,

我们接下来消费者,就可以连接上这些队列,来取出相应的消息了,核心就是这个交换器,和绑定规则,交换器不同,绑定规则不同,那我们派发

消息的这个结果,就不一样

之前我们介绍交换器有四种类型,一种是direct,还有fanout,topic,还有headers,headers我们就不说了,

后来用的呢非常少,他不是路由件来判断的,而是由高级消息队列的消息头,那我们就直接来说前三种,第一种我们

叫direct,这个是直连型的交换器,他的作用呢,就是当我们发送消息时的这个路由件,和我们绑定件一模一样的时候,

消息就会派发给这个队列,举一个例子,我们这里有一个交换器,他的类型呢,是direct,他下边绑定了几个消息队列,

比如是接收路由为dog的消息,而这个绑定规则,是来接收路由key为dogpuppy这个消息,如果我们发了一个消息,我们自己的

路由件,叫dog,那么直连就会找到dog这个规则,对应的这个消息队列,把这个消息放进去,其他的都不会放,只有发消息的

路由件,跟我们绑定的路由件,完全一致的时候,我们才会给你发过来,这就是典型的点对点通信模型

Fanout Exchange这个就非常简单了,如果说我们有一个交换器,是Fanout类型,他下面绑定了比如几个消息队列,

当我们一个消息抵达fanout交换器以后,不管你这个消息的路由件是什么,它会把这个消息给里面的所有队列,每人

都去发一份,这个就是我们说的广播模式,这个发送消息的速度,是最快的,这也是我们实现JMS里边,发布订阅模型的,

一个参考实现,还有我们Topic Exchange,他就更复杂了,它允许我们对路由件,来做一些模糊匹配,然后有选择性的,

把它发给某一个队列,比如我们Exchange是Topic Exchange,他下面绑定了四个队列,而第一个队列他绑定时,用的是

usa.#,这个#是一个通配符,通配符允许#和*,#可以匹配0个或多个单词,*能匹配一个单词,他们是单词级别的匹配,我们

回过来说,如果Exchange下边绑定了四个消息队列,第一个绑定线叫usa.#,相当于后边可以是任意一个单词,第二个叫#.news,

前面可以是任意一个单词,#weather,前面是任意一个单词,后面是weather,europe.#,这个是后边是任意单词,前面是europe,

那如果我们来发送消息,第一个消息我们写的键,叫usa.news,那符合哪个呢,首先usa.#是符合的,只要是usa开头的,不管后边是

哪个单词,都行,那么这个消息会被放到这个队列,还会放到哪个队列呢,还会放到#.news,因为它是usa.news,它是一个新闻,

我们这一块绑定的key是news,前面这个单词我们无所谓,都可以来进行模糊匹配,他就可以来发给这个内容,所以这个消息可以

发到这两个队列上去,那剩下的也都一样,比如所有是weather的,不管是usa的还是europe的,都会来带weather的消息队列里面,

所有以europe开头的,不管你是news还是weather的消息,都会根据规则来到这个队列里面,所有以news结尾的,不管你是usa的

news还是europe的news,都会来到这个队列里边,这就是我们说的有选择性的,进行某种模式进匹配以后,我们再来决定发给

哪个消息队列,那么总结起来来说,第一个根据路由件将消息发给指定的队列,我们说的单播模式,第二种,我们不管路由件发给

我们绑定的交换器的所有消息队列,就是我们说的广播模式,第三种是根据路由件的匹配,我们有选择性的进行广播

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值