消息队列RabbitMQ(二):RabbitMQ的系统架构概述

前言

RabbitMQ是基于AMQP协议的,要想深入理解RabbitMQ,就必须先了解AMQP是个什么东东?

AMQP协议

AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是面向消息中间件设计的应用层协议的一个开放标准。

AMQP是一个应用层协议,可以把它类比为HTTP协议,底层都是基于TCP/IP协议的,只不过它是针对消息中间件设定的,它的设计都是为了实现在生产者和消费者中间传递消息。默认端口为5672。

接下来我们来分析分析AMQP协议的设计模型(这其实也是RabbitMQ的设计模型)

image-20210516200041684

可以看到AMQP是生产者消费者模型,生产者向服务器的交换机发布消息,交换机Exchange通过设定的路由规则binding(有四种)绑定的消息队列queue发送消息。消费者订阅服务器的消息队列,接收Message。

RabbitMQ的架构分析

其实大致上和AMQP差不多,AMQP中也有channel,只是我没画出来。

  • channel:信道,多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质,在客户端的每个连接里,可建立多个通道。

下面说一下我对RabbitMQ的理解

RabbitMQ就是一个中间件,你可以把它类比成 Redis。RabbitMQ服务器中有多个虚拟机,相当于 Redis 中的数据库。

生产者通过channel连接到交换机,先把信息发到交换机,交换机再通过路由规则(binding)把信息发送给绑定的队列。

生产者只能将消息发送到交换机,它甚至都不知道队列的存在。交换机一方面接收来自生产者的消息,另一方面,将它们推入队列。因此交换机必须确切知道如何处理收到的消息。是否应将其附加到特定队列?是否应该将其附加到许多队列中?还是应该将其丢弃。规则(也就是上图的binding)由交换类型定义,常见的交换机类型有四种:direct, topic, headers 和fanout。

注意:Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!

消费者不和交换机打交道,它订阅接收队列的信息。一旦队列不为空,它就随时取出消费。因此生产者生产完信息后可以关闭,消费者不能关闭,要一直监听队列。

posted @ 2021-05-20 16:49  Virtuals  阅读(558)  评论(0编辑  收藏  举报