1、Rabbit MQ,高效部署分布式,消息队列,PPT模板下载: 行业PPT模板: 节日PPT模板: PPT素材下载: PPT背景图片: PPT图表下载: 优秀PPT下载: PPT教程: Word教程: Excel教程: 资料下载: PPT课件下载: 范文下载: 试卷下载: 教案下载: MQ 原理分析,Rabbit MQ 部署与基础操作,Rabbit MQ 简介,Rabbit MQ 优势,Rabbit MQ 分布式与高可用,Rabbit MQ 简介,Rabbit MQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。最初起源于金融系统
2、,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。Rabbit MQ中有几个重要概念:虚拟主机(virtual host),交换机(exchange ),路由键( Routing Key ),队列(queue),绑定(binding),通道(channel),消费者(consumer),生产者(producer)。,1. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 2. Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 3. Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 4. Routi
3、ng Key:路由关键字,exchange根据这个关键字进行消息投递。 5. vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 6. producer:消息生产者,就是投递消息的程序。 7. consumer:消息消费者,就是接受消息的程序。 8. channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。,(1)客户端连接到消息队列服务器,打开一个channel。 (2)客户端声明一个exchange,并设置相关属性。 (3)客户端声明一个queue,并设置相关属性。 (4)客户端使用routing
4、key,在exchange和queue之间建立好绑定关系。 (5)客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。,消息队列的使用过程大概如下:,Rabbit MQ 结构图如下:,RabbitMQ支持消息的持久化,也就是数据写在磁盘上,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分: (1)exchange持久化,在声明时指定durable = 1 (2)queue持久化,在声明时指定durable = 1 (3)消息持久化,在投递时指定delivery_mod
5、e = 2(1是非持久化)如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。,消息持久化:,Rabbit MQ 原理分析,谈到RabbitMQ,首先要谈到MQ和AMQP。MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需用专用连接来链接它们。,AMQP:Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标
6、准,为面向消息的中间件设计。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全性要求很严格。 AMQP允许来自不同供应商的消息生产者和消费者实现真正的互操作扩展,就如同SMTP、HTTP、FTP等协议采用的方式一样。而此前对于消息中间件的标准化努力则集中在API层面上(比如JMS),且没有提供互操作性的途径。不同于JMS的仅仅定义API,AMQP是一个线路级的协议它描述了通过网络传输的字节流的数据格式。因此,遵从这个协议的任何语言编写的工具均可以操作AMQP消息。,Rabbit MQ部署与基本操作,一、Rabbit MQ环境安装: 1、安装Erlangrpm iv
7、h erlang-18.1-1.el6.x86_64.rpm 2、安装RabbitMQ rpm ivh rabbitmq-server-3.5.6-1.noarch.rpm 3、开放端口5672 Iptables -A INPUT -p tcp -dport 5672 -j ACCEPT,二、环境配置: rabbitmq_management一般情况下,RabbitMQ的默认配置就足够了。如果希望特殊设置的话,需要手动创建,配置文件分别为: 环境变量配置文件 rabbitmq-env.conf 配置信息配置文件 rabbitmq.config 环境变量初始值通过文件rabbitmq-env.c
8、onf来配置,rabbitmq-env.conf默认位置在/etc/rabbitmq,且位置不可更改。rabbitmq-env.conf中的每项都以 RABBITMQ_为前缀,常用参数如下:,RABBITMQ_NODE_IP_ADDRESS= /IP地址,空串bind所有地址,指定地址bind指定网络接口 RABBITMQ_NODE_PORT= /TCP端口号,默认是5672 RABBITMQ_NODENAME= /节点名称。默认是rabbit RABBITMQ_CONFIG_FILE= /配置文件路径 RABBITMQ_MNESIA_BASE= /mnesia所在路径 RABBITMQ_LO
9、G_BASE= /日志所在路径 RABBITMQ_PLUGINS_DIR= /插件所在路径,在环境变量配置文件即rabbitmq-env.conf中通过RABBITMQ_CONFIG_FILE指定的文件加后缀.config。一般取名为rabbitmq.config,该文件是标准的Erlang配置文件,rabbitmq.config文件中每个参数为一个Erlang tuple,结构为Key,Value, Key为atom类型, Value为一个term,其中几个关键参数为: tcp_listerners:设置rabbimq的监听端口,默认为5672。 disk_free_limit:磁盘低水位线
10、,若磁盘容量低于指定值则停止接收数据,默认值为mem_rel ative, 1.0,即与内存相关联1:1,也可定制为多少byte。,vm_memory_high_watermark:设置内存低水位线,若低于该水位线,则开启流控机制,默认值是 0.4,即内存总量的40%。 hipe_compile:将部分rabbimq代码用High Performance Erlang compiler编译,可提升性能, 该参数是实验性,若出现erlang vm segfaults,应关掉。 force_fine_statistics:该参数属于rabbimq_management,若为true则进行精细化的统
11、计, 但会影响性能。 frame_max:包大小,若包小则低延迟,若包则高吞吐,默认是131072=128K。 heartbeat:客户端与服务端心跳间隔,设置为0则关闭心跳,默认是600秒。,三、安装插件并启动:启用插件:rabbitmq-plugins enable rabbitmq_management guest这个默认的用户只能通过http:/localhost:15672 来登录,其他的IP无法直接使用这个账号;如果要远程通过Web控制台管理Rabbit MQ需要进行如下的配置: 新增用户:rabbitmqctl add_userusernamepassword 设置用户角色:ra
12、bbitmqctl set_user_tags username administrato 编辑 /etc/rabbitmq/rabbitmq.config 添加如下配置信息:rabbit, tcp_listeners, 5672, loopback_users, “username“ 启动RabbitMQ服务 rabbitmq-server -detached,Rabbit MQ 集群部署,一、为集群中所有服务器安装Erlang和RabbitMQ。 二、同步所有服务器时间。 三、修改/etc/hosts文件,加入集群所有节点描述:192.168.1.1 node1192.168.1.2 no
13、de2192.168.1.3 node3 四、设置Erlang Cookie:Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie。将 node1 的该文件复制到 node2、node3等集群。 五、使用-detached参数启动各节点RabbitMQ。,六、组成集群 将 node2、node3 与 node1 组成集群: node2 # rabbitmqctl stop_app node2 # rabbitmqctl join_cluster rabbitnode1 node2 # rabbitmqctl start_app 此时 node2 与
14、 node3 也会自动建立连接;现在node2、node3均为磁盘节点,如果要使用内存节点,则可以使用如下命令加入集群: node2 # rabbitmqctl join_cluster -ram rabbitnode1 集群配置好后,可以在 RabbitMQ 任意节点上执行如下命令来查看是否集群配置成功。 rabbitmqctl cluster_status,七、设置镜像队列策略: 在任意一个节点上执行: # rabbitmqctl set_policy -p vhostpath name “ “ha-mode“:“all“,“ha-sync-mode“:“automatic“ set_policy -p -priority -apply-to 将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。 完成这 9 个步骤后,RabbitMQ 高可用集群就已经搭建好了。,Rabbit MQ 优势,谢谢!,