让我们从RabbitMQ官网的一段话开始:
RabbitMQ is the most widely deployed open source message broker.
简言之,RabbitMQ是开源的消息队列。将A君的消息,发送给B君,不过这里的B君,不单指某一个具体的实例,可能是一群实例
这篇文章来讲一讲RabbitMQ的几个核心概念
- Producer
- Message
- Exchange
- Queue
- Consumer
概述
我们先看看几个核心概念的关系,如下图:
从上图中可以看到:
- Producer将消息发送到Exchange
- Exchange根据Binding关系,将消息送到0~n个Queue
- Consumer从Queue中得到消息
下面详细讲解每个概念
Producer
首先来看看Producer(生产者),顾名思义,生产消息的实例。需要注意的是:在代码实现上,并没有Producer和Consumer抽象概念。Producer是指调用RabbitMQ API发送消息的实例,Consumer是指调用RabbitMQ API接收消息的实例,仅仅是为了方便描述,或者可以说成,仅仅是逻辑上的概念
Producer、Message、Exchange三者之间的关系如下图
即:
- 一个Producer可以向不同的Exchange发送消息
- 一个Producer可以向任何一个Exchange发送多条消息
Message
其次要讲的是Message,Message Broker当然离不开Message,没了Message,那就不是Message Broker了,只能是其他的什么Broker。Message有多种格式,比如:
- text/plain
- application/json
- ……
Exchange
Exchange就是一个交易所,会有很多的Message进入到Exchange中,Exchange根据Binding key(或者叫Routing key)将Message分发到不同的Queue中
RabbitMQ中的Exchange有多种类型,类型不同,Message的分发机制不同,如下:
- fanout,广播模式。这种类型的Exchange会将Message分发到绑定到该Exchange的所有Queue
- direct,这种类型的Exchange会根据Routing key(精确匹配)将Message分发到指定的Queue
- topic,这种类型的Exchange会根据Routing key(模糊匹配)将Message分发到指定的Queue
fanout
direct
topic
Queue
Queue,队列,消息暂时存放的地方
Consumer
Consumer,消费者,接收消息的实例