设为首页 收藏本站
查看: 690|回复: 0

[经验分享] RabbitMQ安装配置使用指南

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-3 11:10:00 | 显示全部楼层 |阅读模式
一、概述
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/
1
2
wget http://www.rabbitmq.com/releases ... .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
1
rpm --import http://www.rabbitmq.com/rabbitmq-release-signing-key.asc



  • 安装rabbitmq

本次下载的是3.6.6版本
1
2
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扩展源):
1
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
          此配置文件的内容为示例内容,可根据需求进行改动
  • 端口访问设置

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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349656-1-1.html 上篇帖子: linux学习 下篇帖子: 用unbound搭建简单的DNS服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表