首页 > 代码库 > RabbitMQ安装配置使用指南
RabbitMQ安装配置使用指南
一、概述
RabbitMQ是一个由erlang开发的AMQP(Advanced 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:是一种传输服务,维护从生产者到消费者的二路线,保证数据能按照指定方式进行传输。
clientA和clientB:即为生产者,数据的发送方。有两部分:payload(有效载荷)和label(标签),payload是传输的数据,label是标签,用于描述数据。而rabbitmq也是通过label来决定把信息发送给哪个消费者。
client1,client2,client3:即为消费者,数据的接收方。当信息到达队列之后,rabbitmq会依次发送给每一个订阅此信息的消费者,发送给消费者时会删掉信息的标签,对消费者来说自己不知道谁发送的信息。特定情况比如发送的数据包含生产者的信息时另当别论。
数据从生产者到消费者的传递,有几个概念:exchanges, queues和bindings。
Exchanges(交换器):是生产者发布信息的地方,由exchange将消息路由到一个或多个队列中。
queue(队列):是rabbitmq的内部对象,用于存储消息,rabbitmq中的消息都只能存储在队列中,生产者的消息最终都到queue中,消费者可根据订阅从queue中获取消息。
binding(绑定):通过binding将exchange和queue关联起来,这样rabbitmq就知道如何正确地将消息路由到指定的队列了。
需要知道的两个概念:
connection:生产者和消费者之间,使用TCP进行连接到rabbitmqserver的。
channels:虚拟连接,在TCP连接中,数据流是在channel中进行的。
四、应用安装指南
安装环境:CentOS6.8
4.1 安装erlang
安装rabbitmq需要先安装erlang,erlang是一种解释语言,可直接在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
导入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
安装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
此次安装使用的不是全新的系统,有部分相关包已经安装完,故实际操作中根据实际问题安装相应的依赖包。
配置变量
默认的变量可以在日志里查看到,日志在/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/
一般情况,不需要设置环境变量,使用默认就可以,除非有非标准的需求。
配置文件
配置文件的示例文件在/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
端口访问设置
rabbitmq的端口比较多,系统的一些防护机制很可能会有影响,比如selinux,iptables等,以下端口是默认端口:
4369[empd]:是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。
5672, 5671:tcp和ssl的侦听端口
25672:管理插件端口,默认是AMQP端口+20000
1883, 8883:如果MQTT启用的话会用到此端口,MQTT(消息队列遥测传输,是一个即时通讯协议)
系统层的参数修改
在生产上,可能会有大并发连接和队列,使用系统默认的最大打开文件数可能不足以应付高并发,所以需要将最大打开文件数做修改,默认为1024,可用ulimit -n查看,一般情况设置为4096就足以满足大多数工作负载:
ulimit -S-n 4096
本文出自 “我不是我” 博客,请务必保留此出处http://wangwq.blog.51cto.com/8711737/1902758
RabbitMQ安装配置使用指南