RabbitMQ核心概念及AMQP协议

  • 初始RabbitMQ
  • RabbitMQ 高性能的原因
  • Erlang语言的优点
  • 什么是AMQP高级消息队列协议
  • AMQP的核心概念
    • RabbitMQ的整体架构
    • 命令行和管控台-基础操作
    • 命令行和管控台-高级操作
      • 本地管控台的启动
      • 开启插件
  • 消息生产与消费
    • Exchange交换机
      • Exchange类型详解
        • direct exchange
        • topic exchange
        • Fanout Exchange:
        • Header Exchange:

初始RabbitMQ

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议子啊完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言编写的,并且RabbitMQ是基于AMQP协议的


RabbitMQ 高性能的原因

Erlang语言最初在交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的
Erlang语言的优点:Erlang有着和原声Socket一样的延迟


什么是AMQP高级消息队列协议

AMQP全称:(Advanced Message Queuing Protocol )高级 消息队列
AMQP定义:是到有现代特征的二进制协议·是一个提供统一消息应用层标准高级消息队列协议,是应用层协议的一个开放标 准,为面向消息的中间件架构.

RabbitMQ核心概念及AMQP协议_第1张图片
AMQP协议模型


AMQP的核心概念

  • Server:又称Broker,接受客户端的连接,实现AMQP实体服务
  • Connection: 连接,应用程序与Broker的网络连接
  • Chanel:网络通信。几乎所有的操作都是在chanel中进行,Chanel是进行消息的读写通道,一个客户端可以建立多个Chanel,每个Chanel代表一个会话任务
  • Message:消息,服务器和应用程序之间传递的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容
  • Virtual host:虚拟主机,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干的Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange和Queue
  • Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列
  • Binding:Exchange和Queue之间的虚拟链接,binding中可以包含多个routing key
  • Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
  • Queue:也称为Message Queue,消息队列,保存消息并将他们转发给消费者

RabbitMQ的整体架构

RabbitMQ核心概念及AMQP协议_第2张图片

RabbitMQ消息是如何流转的(在Message当中会指定routing key)


RabbitMQ核心概念及AMQP协议_第3张图片

命令行和管控台-基础操作

RabbitMQ核心概念及AMQP协议_第4张图片
RabbitMQ核心概念及AMQP协议_第5张图片

命令行和管控台-高级操作

RabbitMQ核心概念及AMQP协议_第6张图片

本地管控台的启动

首先切换目录到 /etc/rabbitmq这个目录下 进行启动操作
service rabbitmq-server start

开启插件

sudo rabbitmq-plugins enable rabbitmq_management

一定要是以管理员权限


消息生产与消费

  • ConnectionFactory:获取连接工厂
  • Connection:一个连接
  • Chanel:数据通信信道,可发送和接受消息
  • Queue:具体的消息存储队列
  • Producer & Consumer 生产者和消费者

Exchange交换机

Exchange:接收消息,并根据路由键转发消息所绑定的队列


RabbitMQ核心概念及AMQP协议_第7张图片

RountingKey就是Exchange和Queue的绑定关系

交换机属性:

  • Name:交换机名称
  • Type:交换机类型:direct、topic、fanout、headers
  • Durablity:是否需要持久化,true为持久化
  • Auto delete:当最后一个绑定到Exchange上队列删除后,自动删除该Exchange
  • Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false在实际的使用当中基本上也设置为false)
  • Arguments:扩展参数,用于扩展AMQP协议自制定化使用

Exchange类型详解

direct exchange

所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
注意:Direct模式可以使用RabbitM自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列吸收,
否则该消息会被抛弃

RabbitMQ核心概念及AMQP协议_第8张图片

topic exchange

所有发送到topic Exchange的消息都被转发到所有关心routeKey中指定的Topic的queue上
Exchange将RouteKey和某topic进行模糊匹配,此时队列需要绑定一个topic


RabbitMQ核心概念及AMQP协议_第9张图片

RabbitMQ核心概念及AMQP协议_第10张图片
Fanout Exchange:

不处理任何的路由键,只需要简单的将队列绑定在交换机上,发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
Fanout交换机转发消息是最快的

RabbitMQ核心概念及AMQP协议_第11张图片

相对于direct类型来说的话,fanout不需要绑定routkey(设置RouteKey为空,设置了也没有作用)
简单点来说就是如果是同样的fanout和direct都绑定了queue,在fanout中所有的绑定了的queue都能收到消息
但是direct中的绑定的queue不一定能接收到消息,必须要RouteKey一致

但是不绑定就一定收不到消息

Header Exchange:

通过消息头来判断(不常用)


Binging-绑定
Exchange和Exchange、Queue之间的连接关系
Binding中可以包含RoutingKey或者参数
Queue-消息队列
消息队列,实际存储消息
Durablity:是否持久化,Durable:是,Transient:否
Auto delete:如果选择yes,代表当最后一个监听被移除之后,该Queue会自动被删除
Message-消息
服务器和应用程序之间传送的数据
本质上就是一段数据,由properties和payload(body)组成
常用属性:delivery mode(持久化和非持久化),header(自定义属性)
其他属性:content_type,content_encoding,priorty
correlation_id(关键, 一般是用来作为消息的唯一ID,由业务和timestampID组成 ),reply_to,expiration,message_id,
timestamp,type,user_id,app_id,cluster_id
Vitual Host-虚拟主机
虚拟地址,用于进行逻辑隔离,最上层的消息路由
一个Virtual Host里面可以有若干个Exchange和Queue
但是同一个Virtual Host里面能够有名称相同的Exchange和Queue

参考课程:https://coding.imooc.com/class/262.html

你可能感兴趣的:(RabbitMQ核心概念及AMQP协议)