RabbitMQ总结-介绍

183 阅读2分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

AMQP

名词

  • Broker:消息队列服务实体

    • 生产者将消息存入RabbitMQ Broker中,消费者从Broker中消费数据
  • Queue: RabbitMQ内部对象,用于存储消息且只能存在队列中。

    • 每个消息都会被投放到一个或多个队列中
    • 多个消费者可以订阅同一个队列,消息会被平摊,而不是多个消费者都能接受所有消息并处理。
  • Exchange(交换机) : 交换机按照规则将消息路由到一个或多个消息队列中。

    • 生产者不会把消息直接放到队列中,而是发给交换机Exchange
    • 如果路由不到,会返回给生产者或丢弃
  • RoutingKey(路由关键字) : 决定路由规则,Exchange根据这个进行消息投递

  • Bingding: 将Exchange和Queue根据路由规则绑定起来

  • channel(消息通道):在客户端的每个TCP连接中可以建立多个channel,每个channel代表一个会话任务。

  • vhost(虚拟主机) : 一个broker可以配置多个,用于不同用户的权限隔离。

生产者和消费者

快餐车模式:厨师(生产者)将生产好的产品(消息)放到快餐车上(RabbitMQ),顾客(消费者)想要时从快餐车(RabbitMQ)中拿产品(消息)。

消息

包含两部分:有效载荷和标签。

  • 有效载荷:想要传输的数据,可以是任意内容

  • 标签:描述了有效载荷,RabbitMQ根据标签来决定发送给谁。

  • 生产者创建消息并根据标签将消息发布到RabbitMQ的队列上。

  • 消费者订阅某个队列,当消息到达该队列上时,消费者接收到有效载荷。

    • 消费者不知道谁生产了这个消息,除非生产者将自身信息放到有效载荷中。

信道

1.首先应用程序和Rabbit服务器之间建立TCP连接。

2.创建一条AMQP信道,信道是建立在TCP上的虚拟连接,每个信道都有唯一ID

3.AMQP命令都是通过信道完成的

  • 为什么不直接通过TCP传输AMQP命令?

    建立和销毁TCP连接是十分昂贵的的开销。当多个线程需要对RabbitMQ进行操作时,需要建立多条TCP连接,对TCP连接是巨大的浪费。

    如果只建立一条TCP连接,在他上面再虚拟的进行独立的连接,确保了线程的私密性,也不浪费开销。

Rabbit路由

消息发送到交换机上,通过路由规则将交换机和队列连接起来

image.png