首页 > 代码库 > RabbitMQ安装配置使用指南

RabbitMQ安装配置使用指南

一、概述

RabbitMQ是一个由erlang开发的AMQPAdvanced Message Queuing Protocol)的开源实现。AMQP,即高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。服务器端是用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面具有良好的表现。

二、应用场景

对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability);如果使用socket那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如:

 

 1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据如何方式丢失?

 2)如何降低发送者和接收者的耦合度?

 3)如何让优先级高的接收者先接到数据?

 4)如何做到负载均衡?有效均衡接收者的负载?

 5)如何有效的将数据发送到相关的接收者?也就是说将接收者订阅的不同数据,如何做有效的过滤。

 6)如何做到可扩展,甚至将这个通信模块发到cluster上?

 7)如何保证接收者接收到了完整,正确的数据?

  AMDQ协议解决了以上的问题,而RabbitMQ实现了AMQP

三、服务结构

rabbitmq的框架如下:

技术分享

几点解释:

rabbitmq server:是一种传输服务,维护从生产者到消费者的二路线,保证数据能按照指定方式进行传输。

clientAclientB:即为生产者,数据的发送方。有两部分:payload(有效载荷)和label(标签),payload是传输的数据,label是标签,用于描述数据。而rabbitmq也是通过label来决定把信息发送给哪个消费者。

client1client2client3:即为消费者,数据的接收方。当信息到达队列之后,rabbitmq会依次发送给每一个订阅此信息的消费者,发送给消费者时会删掉信息的标签,对消费者来说自己不知道谁发送的信息。特定情况比如发送的数据包含生产者的信息时另当别论。

 

数据从生产者到消费者的传递,有几个概念:exchanges, queuesbindings

Exchanges(交换器):是生产者发布信息的地方,由exchange将消息路由到一个或多个队列中。

queue(队列):是rabbitmq的内部对象,用于存储消息,rabbitmq中的消息都只能存储在队列中,生产者的消息最终都到queue中,消费者可根据订阅从queue中获取消息。

binding(绑定):通过bindingexchangequeue关联起来,这样rabbitmq就知道如何正确地将消息路由到指定的队列了。

 

需要知道的两个概念:

connection:生产者和消费者之间,使用TCP进行连接到rabbitmqserver的。

channels:虚拟连接,在TCP连接中,数据流是在channel中进行的。

 

四、应用安装指南

安装环境:CentOS6.8

4.1 安装erlang

安装rabbitmq需要先安装erlangerlang是一种解释语言,可直接在rabbitmq官网中下载到(但可能不是最新版本)。地址: http://www.rabbitmq.com/releases/erlang/

wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm
rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm

4.2 安装rabbitmq

  1. 导入rabbitmq公钥

首先导入rabbitmq的公钥,不安装密钥的话安装rabbitmq会报错

报错:warning: rabbitmq-server-3.6.6-1.el6.noarch.rpm: Header V4 RSA/SHA1Signature, key ID 6026dfca: NOKEY

rpm --import http://www.rabbitmq.com/rabbitmq-release-signing-key.asc
  1. 安装rabbitmq

下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/

本次下载的是3.6.6版本

wget 
rpm -ivh rabbitmq-server-3.6.6-1.el6.noarch.rpm

安装过程中可能会报错,如:

error: Faileddependencies:

        socat is needed byrabbitmq-server-3.6.6-1.el6.noarch

原因是缺少socat包,安装即可(需要epel扩展源):

yum install socat

此次安装使用的不是全新的系统,有部分相关包已经安装完,故实际操作中根据实际问题安装相应的依赖包。

 

  1. 配置变量

默认的变量可以在日志里查看到,日志在/var/log/rabbitmq/下,有四个文件,查看rabbit@hostname.log前面的几行,有相关变量的说明,如:


node           : rabbit@rabbit01

home dir       : /var/lib/rabbitmq      

config file(s) :/etc/rabbitmq/rabbitmq.config

cookie hash    : +aRq6ISnMthDGwICCmjvGw==

log            : /var/log/rabbitmq/rabbit@rabbit01.log

sasl log       : /var/log/rabbitmq/rabbit@rabbit01-sasl.log

databasedir   : /var/lib/rabbitmq/mnesia/rabbit@rabbit01

 

设置环境变量可以创建一个rabbitmq-env.conf文件,rabbitmq的环境变量都是有“RABBITMQ_”这样的前缀的,在配置文件里配置变量时要把前缀去掉,如:

#Rename the node

NODENAME=rabbit@rabbit01

#Config file location and new filename bunnies.config

CONFIG_FILE=/etc/rabbitmq/

 

一般情况,不需要设置环境变量,使用默认就可以,除非有非标准的需求。

 

  1. 配置文件

配置文件的示例文件在/usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example,可以拷贝到/etc/rabbitmq/下并改名将example去掉:

cp/usr/share/doc/rabbitmq-server-3.6.6/rabbitmq.config.example/etc/rabbitmq/rabbitmq.config

          此配置文件的内容为示例内容,可根据需求进行改动

相关参数可参考官方文档:http://www.rabbitmq.com/configure.html#configuration-file

  1. 端口访问设置

rabbitmq的端口比较多,系统的一些防护机制很可能会有影响,比如selinuxiptables等,以下端口是默认端口:

4369[empd]:是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。

5672, 5671tcpssl的侦听端口

25672:管理插件端口,默认是AMQP端口+20000

1883, 8883:如果MQTT启用的话会用到此端口,MQTT(消息队列遥测传输,是一个即时通讯协议)

 

 

  1. 系统层的参数修改

在生产上,可能会有大并发连接和队列,使用系统默认的最大打开文件数可能不足以应付高并发,所以需要将最大打开文件数做修改,默认为1024,可用ulimit -n查看,一般情况设置为4096就足以满足大多数工作负载:

         ulimit -S-n 4096

 


本文出自 “我不是我” 博客,请务必保留此出处http://wangwq.blog.51cto.com/8711737/1902758

RabbitMQ安装配置使用指南