RabbitMQ 一、AMQP协议 二、RabbitMQ基础介绍 三、安装部署 四、配置使用RabbitMQ =================================================================================================================== 一、AMQP协议 1、AMQP(Advanced Message Queuing Protocol) 高级消息队列协议 属于应用层的一个用于消息传递的协议。AMQP协议是一种二进制协议。基于AMQP的应用能够用于组件之间的解耦。 2、AMQP协议功能部分 Broker 简单来说就是消息队列服务器的实体。 Exchange 接收消息,转发消息到绑定的队列上,指定消息按什么规则,路由到哪个队列。 Queue 消息队列载体,用来存储消息,相同属性的 queue 可以重复定义,每个消息都会被投入到一个或多个队列。 Binding 绑定,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。 RoutingKey 路由关键字,Exchange 根据这个关键字进行消息投递。 Producter 消息生产者,产生消息的程序。 Consumer 消息消费者,接收消息的程序。 Channel 消息通道,在客户端的每个连接里可建立多个 Channel,每个 channel 代表一个会话。之所以选择信道,而不是 在 TCP 连接上进行命令的发送,主要是基于性能的考虑。在操作系统中,建立和销毁 TCP 连接的开销是很昂贵的。 而且,同一时刻,操作系统对于 TCP 连接的数量也是有限制的,很容易成为性能的瓶颈。而采用信道就不会有这种 问题,可以在一个 TCP 连接中,任意的创建多条信道。 =================================================================================================================== 二、RabbitMQ基础介绍 RabbitMQ是AMQP协议的一个开源实现,RabbitMQ服务器是用Erlang语言编写的。常用的消息中间件还有ZeroMQ、ActiveMQ、 Apollo、Kafka、RocketMQ。 1、安装方式 在安装rabbitmq-server之前必须安装 Erlang环境。Erlang的安装方式有三种: 1、rabitmq官方为rabbitmq-server独立运行制作的Erlang环境安装包,该软件包剥离了一些对于运行RabbitMQ 并不重要的Erlang模块和依赖项(建议使用这种方式) 官方安装指南地址:https://github.com/rabbitmq/erlang-rpm 2、Erlang官方的安装包。erlang解决方案倾向于提供尖端的Erlang版本,可能会或可能不会被RabbitMQ支持。 3、epel源安装 yum install erlang 2、rabbitMQ部署模式 单机模式:即单机情况不做集群,就单独运行一个rabbitmq而已。 普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一 个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同队列的结构。当消息进入rabbit01 节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输, 把A中的消息实体取出并经过B发送给consumer。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点 中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久 化的话,就会产生消息丢失的现象。 高可用模式:把需要的队列做成镜像队列,存在与多个节点属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其 实质和普通模式不同之处在于:消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模 式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部 的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。 3、rabbitmq-server的插件 可以使用rabbitmq-plugins程序进行管理。 rabbitmq-manangement:基于web接口的管理工具,监听在 15672 端口 4、rabbitmq的端口 15672 web管理工具端口 5672 rabbitmq-server服务端口 25672 集群的通信接口 5、安装后生成的主要程序 /usr/sbin/rabbitmq-plugins # 插件管理工具 /usr/sbin/rabbitmq-server # 主程序 /usr/sbin/rabbitmqctl # 命令行控制工具 =================================================================================================================== 三、安装部署 官方站点:https://www.rabbitmq.com/ 1、创建RabbitMQ提供的零依赖安装包yum源 vim /etc/yum.repo.d/erlang.repo # In /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 gpgcheck=0 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1 2、安装erlang包 yum install erlang 3、导入rabbitmq包的认证密钥 rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc 4、安装rebbitmq-server yum install rabbitmq-server-3.7.4-1.el7.noarch.rpm =================================================================================================================== 四、配置使用RabbitMQ 1、配置方式 环境变量:定义网络参数及配置文件路径 配置文件:定义服务器组件的访问权限及资源限制(用户、插件、集群等) 运行时参数:修改集群运行的设定 2、默认配置参数 vim /usr/lib/rabbitmq/bin/rabbitmq-defaults CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins GENERATED_CONFIG_DIR=${SYS_PREFIX}/var/lib/rabbitmq/config ADVANCED_CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/advanced SCHEMA_DIR=${SYS_PREFIX}/var/lib/rabbitmq/schema 3、环境变量配置文件 # 参考文档:http://www.rabbitmq.com/configure.html#define-environment-variables /etc/rabbitmq/rabbitmq-env.conf # 文件默认不存在,可自行创建 RABBITMQ_BASE= # 数据库和日志文件目录 RABBITMQ_NODE_PORT= # 监听端口号 RABBITMQA_NODE_IP_ADDRESS= # 监听端口 HOSTNAME= RABBITMQ_NODENAME=mq RABBITMQ_CONFIG_FILE= # 配置文件的路径 RABBITMQ_MNESIA_BASE=/rabbitmq/data # 需要使用的MNESIA数据库的路径 RABBITMQ_LOG_BASE=/rabbitmq/log # log的路径 RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins # 插件的路径 4、配置文件 注:在RabbitMQ 3.7.0之前,RabbitMQ配置文件被命名为 rabbitmq.config,并且是一个标准的Erlang配置文件。 仍然可以将此格式与3.7.0以前的版本一起使用,以保持向后兼容性。鼓励运行3.7.0或更高版本的用户首先 考虑新的sysctl格式。RabbitMQ服务器源代码库包含一个名为 rabbitmq.conf.example 的示例rabbitmq.conf文件。 /etc/rabbitmq/rabbitmq.conf auth_mechanisms # 认证机制 default_user # 默认连接的用户 default_pass # 默认密码 default_permission # 默认权限 disk_free_limit # 消息持久化到磁盘的最小空间大小 5、运行时参数配置 rabbitmqctl命令 用户管理: rabbitmqctl add_user mqadmin passwd rabbitmqctl set_user_tags mqadmin administrator rabbitmqctl set_permissions -p / mqadmin ".*" ".*" ".*" 6、插件管理 rabbitmq-plugins enable rabbitmq_management 7、防火墙开启 firewall-cmd --zone=public --add-port=25672/tcp --permanent firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent ===================================================================================================================