教程说明

  • 本系列教程目录大纲:​​《RabbitMQ系列教程-目录大纲》​​


第二章 RabbitMQ简介

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。AMQP :Advanced Message Queue Potocal,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2.1 RabbitMQ架构

RabbitMQ内部架构图:

《RabbitMQ系列教程-第二章-RabbitMQ简介》_java

​Producer​​(生产者): 消息的生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。

​Broker​​(服务器):即RabbitMQ Server,也叫Broker server,接收和分发消息的应用,保证数据能够按照指定的方式进行传输。

​Connection​​(连接):Producer/Consumer 和 broker 之间的 TCP 连接,在消息发送时必须要先建立与RabbitMQ服务器的连接(Connection)

​Channel​​(信道):建立在Connection中,消息是基于Channel传递的,Channel之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销;如果每一次访问RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。

​VirtualHost​​(虚拟主机):exchange/queue是属于某个VirtualHost的,VirtualHost属于某个用户的;VirtualHost可以分配用户在创建交换机或队列时可以指定其属于哪个虚拟主机,方便用户管理交换机和队列,

​Exchange​​(交换机):生产者将消息发送到 Exchange(交换器),由 Exchange将消息路由到一个或多Queue 中(或者丢弃)。Exchange 并不存储消息。RabbitMQ 中的 Exchange 有direct、fanout、topic、headers 四种类型,每种类型对应不同的路由规则。

​Queue​​(队列):是RabbitMQ的内部对象,用于存储消息。消息消费者就是通过订阅队列来获取消息;RabbitMQ 中的消息都只能存储在Queue中,生产者生产消息并最终投递到Queue 中,消费者可以从 Queue 中获取消息并消费。多个消费者可以订阅同一个Queue,这时 Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理

2.2 RabbitMQ安装

参考:​​Linux安装RabbitMQ​​

2.3 创建用户

《RabbitMQ系列教程-第二章-RabbitMQ简介》_java_02

角色说明:

  • Admin:包含Monitoring和Policymaker所拥有的权限,另外可以创建和删除​​virtual hosts​​、查看、创建和删除users、查看创建和删除permissions、关闭其他用户的connections
  • Monitoring:包含management所拥有的权限,另外可以列出所有virtual hosts,包括他们不能登录的virtual hosts、查看其他用户的connections和channels
  • Policymaker:包含management锁拥有的权限,另外可以查看、创建和删除自己的virtual hosts所属的policies和parameters
  • Management:可以使用AMQP做任何的事,另外可以查看自己的virtual hosts中的queues, exchanges 和 bindings,查看和关闭自己的channels 和 connections
  • None:不能访问 management plugin

2.3 配置虚拟主机

2.3.1 创建虚拟主机

《RabbitMQ系列教程-第二章-RabbitMQ简介》_交换机_03

2.3.2 配置权限

《RabbitMQ系列教程-第二章-RabbitMQ简介》_队列_04

《RabbitMQ系列教程-第二章-RabbitMQ简介》_rabbitmq_05

《RabbitMQ系列教程-第二章-RabbitMQ简介》_rabbitmq_06


下一篇:​​《RabbitMQ系列教程-第三章-RabbitMQ快速入门》​​