简介

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

相关定义

  • Broker: 简单来说就是消息队列服务器实体
  • Exchange:它指定消息按什么规则,路由到哪个队列
  • Queue:消息队列的载体,每个消息都会投入到一个或多个消息队列中
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
  • Routing Key: 路由关键字,exchange根据这个关键字进行消息投递
  • VHost: 虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  • Producer: 消息生产者,就是投递消息的程序
  • Consumer: 消息消费者,就是接受消息的程序
  • Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

由Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。

RabbitMQ的工作模式

RabbitMQ的官方网站中一共介绍了6种工作模式。6种工作模式

1. Hello world 简单模式

image.png

P:生产者:也就是要发送消息的程序

C:消费者:消息的接受者会监听消息生产者,会一直等待消息到来

应用场景: 聊天

Producter 如果发送消息时,如果发送的队列没有绑定交换机和routing key的话,那么将会使用默认的交换机并且将发送的消息队列名作为routing key

2. Work queues 工作模式

image.png

多个消费者监听只听同一名称的队列消费消息(消费者属于竞争关系)

3.Publish 发布与订阅模式

image.png

这种模式添加了一个角色X即交换机Exchange

多个队列绑定相同的交换机接收相同的消息
多个消费者监听相对的队列接收相同的消息

这种模式需要使用fanout 类型的交换机,这种交换机不处理routing key 只需要将队列绑定到交换机上就可以,因此,fanout类型的交换机转发消息是最快的。

4.Routing 路由模式

image.png

队列通过routingkey 绑定 direct类型的交换机,生产者向交换机发送消息时,也需要指定相应的routingkey 交换机就会把这个routingkey对应的消息发送到绑定改rotingkey的队列中,如果routingkey不一致则交换机不会把消息发送到队列中

5.Topics 通配符模式

image.pngv

Exchange:使用topic模式的交换机,这种类型的交换机与direct相比就是在绑定routingkey时可以使用通配符

通配符匹配规则

#:匹配一个或多个词

*:匹配不多不少恰好1个词

举例:

item.#: 能够匹配item.insert.abc或者item.insert

*item.只能匹配item.insert