RabbitMQ核心概念与消息分发机制

RabbitMQ整体架构

RabbitMQ核心概念与消息分发机制_第1张图片

Producer

生产者,就是透体消息的一方。生产者创建消息,然后发不到MQ中。

消息一般可以分为两个部分:

  • 消息体:在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON字符串。
  • 附加信息:比如目标交换器的名称、路由键、消息头部和一些自定义属性等。
Broker

RabbitMQ的服务节点,一个Broker可以简单的看作一台RabbitMQ服务器,在集群模#式下,就是其中一个服务节点。

Virtual Host

虚拟主机,每个Broker中可以有多个虚拟主机,每个虚拟主机上可以创建一批交换器、消息队列,虚拟主机是共享相同的身份认证和加密环境的独立服务器域。虚拟主机本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。Virtual Host是AMQP概念的基础,必须在连接时指定,默认的Virtual Host是/。类似于MySQL中的database概念。

Channel

通道,是建立在Connection连接之上的一种轻量级连接,大部分操作是在Channel中完成的,包括队列的声明queueDeclare、交换器的声明exchangeDeclare、队列绑定queueBind、发布消息basicPublish、消费消息basicConsume等。

RoutingKey

路由键,生产者将消息发给交换器的时候,由routingKey决定消息流向的队列

Exchange

交换器,生产者消息的接收者,Exchange根据路由规则将消息分发到下游的队列中。如果路由不到,返回给生产者或者丢弃

Binding

绑定,RabbitMQ通过绑定关系将交换器与队列关联起来,在绑定时会指定一个bindingKey表示路由规则,这样RabbitMQ就知道如何将消息路由到队列了。交换器与队列是多对多的关系,一个交换器可以绑定多个队列,一个队列也可以绑定到多个交换器上。

Consumer

消费者,消费者连接RabbitMQ服务器,并消费到队列上。当消费者消费消息时,只会获得消息的消息体,在消息路由过程中,消息的标签会被丢弃,存入到队列的只有消息体。

消息分发机制

RabbitMQ中通过Exchange交换器将消息分发到队列,根据不同的Exchange类型,实行不同的分发策略

  1. fanout:会把消息路由到所有与该交换器绑定的队列中,并忽略RoutingKey。
  2. direct:会把消息路由到绑定时bindingKey与消息routingKey完全相等的队列中。
  3. topic:与dircet类似,但是可以使用通配符进行模糊匹配。.作为单词分隔符,*匹配单个单词,#匹配所有内容
  4. header:不依赖于RoutingKey,而是根据消息的headers属性进行匹配。绑定时不再指定bindingKey,而是指定arguments。arguments是一个Map,如果arguments里面有a=1的key/value,消息的headers也需要有a=1才能被路由。

你可能感兴趣的:(消息中间件)