内容简介:MQ(Msaaage Queue,消息队列)是一种应用程序对应用程序的通信方式。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无须专用链接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通讯。而不是通过直接调用彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。在项目中,将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统的吞吐量RabbitMQ支持消息的持久化,也就是数据写在磁盘上。为了数据安全考虑,大
RabbitMQ是什么?
MQ(Msaaage Queue,消息队列)是一种应用程序对应用程序的通信方式。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无须专用链接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通讯。而不是通过直接调用彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
RabbirMQ使用场景
在项目中,将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统的吞吐量
RabbitMQ支持消息的持久化,也就是数据写在磁盘上。为了数据安全考虑,大多数企业都会选择持久化。当然如果不需要消息持久化,那么使用内存节点即可。RabbitMQ的集群节点包括内存节点、磁盘节点。最合适的方案就是既有内存节点,又有磁盘节点。
RabbitMQ实际应用
RabbitMQ是用Erlang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。
RabbitMQ模式大概分为三种
- 单一模式
- 普通模式(默认的集群模式)
- 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)
要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式可以实现高可用。
RabbitMQ功能
- 异步消息:支持多种消息传递协议,消息队列,传递确认,灵活路由到队列,多种交换类型。
- 开发经验:与BOSH,Chef,Docker和Puppet一起部署。使用喜欢的编程语言开发跨语言消息,例如:Java,.NET,PHP,Python,JavaScript,Ruby,Go 等等。
- 分布式部署:部署为集群以实现高可用性和吞吐量; 联合多个可用区和区域
- 企业和云就绪:可插拔身份验证,授权,支持TLS和LDAP。轻量级,易于部署在公共云和私有云中。
- 工具和插件:支持持续集成,运营指标和与其他企业系统集成的各种 工具 和插件。灵活的插件方法,用于扩展RabbitMQ功能。
- 管理和监督:用于管理和监控 RabbitMQ的HTTP-API,命令行工具和UI
RabbitMQ集群搭建
实现步骤
设计架构模式:在一个集群里,有三台服务器,其中一台使用磁盘模式,另两台使用内存模式。两台内存模式的节点速度更快,因此通过客户端连接访问它们。但是在客户端不可能分别连接两台内存节点,肯定是通过前端反向代理去轮询分发请求。如果担心前端反向代理服务器故障,可以通过keepalived软件做一个高可用架构。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用。
环境准备
- 关闭防火墙及selinux
systemctl stop firewalld.service setenforce 0
- 虚拟机规划如下
主机名 | IP地址 | 操作系统 | 系统用途 | 软件包 |
---|---|---|---|---|
mq01 | 172.16.10.28 | CentOS-7-x86_64 | 磁盘节点 | rabbitmq-server-3.3.5 |
mq02 | 172.16.10.29 | CentOS-7-x86_64 | 内存节点 | rabbitmq-server-3.3.5 |
mq03 | 172.16.10.31 | CentOS-7-x86_64 | 内存节点 | rabbitmq-server-3.3.5 |
修改主机名及hosts文件
vim /etc/hostname mq01.localdomain //三台服务器都需要修改,分别改为mq02,mq03,名称可以自定义 vim /etc/hosts 172.16.10.28 mq01 172.16.10.29 mq02 172.16.10.31 mq03 //hosts文件三台服务器都一致,与hostname修改的内容要对应 reboot //修改之后重启虚拟机生效
安装rabbitmq软件
yum install epel-release -y yum install rabbitmq-server -y
查看节点服务
rabbitmq-plugins list
启动管理服务
rabbitmq-plugins enable rabbitmq_management
启动rabbitmq服务
systemctl start rabbitmq-server.service netstat -ntap | grep 5672
在服务启动之后,若是有三个端口开放,则表示服务服务开启成功。其中15672和25672都是rabbitmq的管理端口,5672则是和生产者、消费者通信的端口。
查看连接状态
先查看单个连接是否能够,三台服务器都要做测试,如果连接失败,就要检查前面的hostname和hosts文件设置有没有错误。
rabbitmqctl cluster_status
修改.erlang.cookie文件
Rabbitmq的集群是依赖于Erlang的集群来工作的,所以必须先构建起Erlang的集群环境。在Erlang的集群中,各节点通过一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie(该文件为隐藏文件)中,文件是400的权限。必须使各节点cookie保持一致,否则节点之间就无法通信。注意在作修改时,应先关闭rabbitmq服务
cat .erlang.cookie //查看文件中的值,修改两个内存节点,使三个值相同 systemctl stop rabbitmq-server.service //关闭两个内存节点的rabbimq服务,并修改cookie值 systemctl start rabbitmq-server.service //修改完成之后再启动服务
将内存节点与磁盘节点相连
将mq02、mq03作为内存节点,mq01作为磁盘节点。节点mq01和mq02上操作一致,先停止rabbitmq应用,然后(在mq02服务器上)调用cluster命令将mq02连接到mq01;(在mq03服务器上)将mq03连接到mq01,使三者成为一个集群,最后启动rabbitmq应用。
rabbitmqctl stop_app //关闭应用 rabbitmqctl join_cluster --ram rabbit@mq01 //将内存节点连接到磁盘节点 --ram表示作为内存节点 rabbitmqctl start_app //开启应用,mq02与mq03操作相同
查看端口,确保服务都正常
netstat -ntap | grep 5672
mq01
mq02
mq03
访问管理网页
打开浏览器访问http://172.16.10.28:15672,默认账号和密码均为“guest”
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch 集群搭建和集群原理
- Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建
- Spark集群环境搭建
- Zookeeper搭建集群
- FastDFS集群搭建
- Zookeeper集群环境搭建
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python编程无师自通
[美] 科里·奥尔索夫(Cory Althoff) / 宋秉金 / 人民邮电出版社 / 2019-1-1 / 59
畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一。 作者从文科毕业,通过自学编程转行为专业程序员,在硅谷工作多年后成功技术创业。本书不仅教读者如何使用Python语言编程,还会介绍其他书中所忽略的、编程初学者应该了解并掌握的其他所有知识点。 本书作者是一名自学成才的程序员,经过一年的自学,掌握了编程技能并在eBay找到了一份软件工程师的工作。本书是作者结合个人经验写......一起来看看 《Python编程无师自通》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
RGB HSV 转换
RGB HSV 互转工具