一 .概述
从整体上讲Rabbitmq就是一个生产者消费者的模型.
我们将中间的整个broker就当做是一个消息中间件的实体就可以了.
单从这个方面上讲,生产者发送消息到broker上面,然后消费者从broker之中获取数据,最终完成数据的通信任务.
二 .broker的结构
我们的一个Rabbitmq可以称为是一个broker,我们一般情况下就当做是一个消息中间件的实例.
人为的,Rabbitmq将整个Broker划分成多个Vhosst,我们可以认为是一个一个的逻辑的空间,这些逻辑空间之间是相互隔离的.
我们一般情况下,在一次的生产和消费的过程之中只会使用一个Vhost.
三 .Vhost的结构
在上面我们说到Vhost是一个逻辑的空间,在这个逻辑的空间之中存在大量的exchange和queue,首先我们不去管exchange和queue之间是怎么连接的.
也就是说,我们只要知道一个vhost就是存储一堆的exchange和queue的存储空间就可以 了.
四 .exchange
和其它的消息中间的最大区别,就是在amqp协议之中的exchange的概念,我们现在可以将exchange当做是一个转发的代理.
它本身仅仅提供的功能就是帮助实现路由的转换,帮助将消息转发到对应的消息队列上面.
在下面我们会说交换机的类型的概念,这是一个比较复杂的概念.
五 .消息队列
消息队列就是最终存储消息的地方,也是整个消息中间件之中最为重要的一个地方,消息队列和消费者联系,决定消费者到底能够获取到什么样的消息.
多个消费者可以订阅一个队列的内容,但是队列会按照轮询的方式进行消息的发送,我们在后面有办法改变这样的行为.
六 . 联系
现在我们需要说明在整个Rabbitmq之中最为复杂的一个概念,路由键,绑定建和绑定的概念了.
我们首先可以这样理解绑定,绑定就是建立联系,但是绑定是否生效需要看路由键和绑定建的设置情况.
在介绍具体的联系之前,我们需要对exchange的类型做一个了解.
七.exchange的类型
在Rabbitmq之中,现在一般可以划分成四种类型,这四种类型我们称为Rabbitmq最基本的类型.
[1]direct类型:
在上面的图中,描述了一个direct类型的exchange.
对于direct类型的交换机,它只会讲消息交给路由键和消息队列一致的消息队列.
比如,上面的图中定义了多个绑定,当发送
路由键为info的消息的时候,消息会被路由到队列2上面.
路由键为waring的消息的时候,消息就会被路由到队列1和队列2上面.
从这个上面,我们也能够知道发送一个消息我们需要制定一个交换机,然后制定一个路由键.
然后交互机会根据自己的类型和消息中附带的路由键找到对应的消息队列,是否真正的发送需要和绑定建进行比对.
比如上面的图中,我们知道交换机和消息队列进行了绑定,绑定的规则定义了4中,但是仅仅只有两个关系.
[2]fanout类型
fanout类型是一个最直接的类型,只要消息到达这样的交互机,它上面都不管,只要有队列和我有联系,我就将消息交给他.
如上图,一个消息到达了交换机,它上面都不管,直接将消息交给了有连接的队列之中.
[3]topic交换机
这种交互机比较器之前的类型,就是多了一个模糊匹配的功能.
在Rabbitmq之中,使用了#和*代表模糊查找的占位符.
其中:#表示多个单词 ,*表示一个单词.
我们看看上面图:
当我们的消息的路由键的值为usa.news,那么消息可以成功了路由到队列1和队列2.
当为usa.weather的时候,会路由到队列1队列3.