一、RabbitMQ介绍
1、什么是MQ
MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游"逻辑解耦+物理解耦"的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。
2、MQ的优缺点
优点:
异步通信:消息队列允许多个处理程序并行处理消息,这可以减轻应用程序的负载,提高系统的吞吐量。
可靠性:消息队列通常支持事务性操作,这有助于确保消息的可靠传递,以及在失败时能够进行重试。
解耦:消息队列可以用于将应用程序的不同部分解耦,使它们能够以松散或独立的方式进行通信。
可扩展性:MQ支持在分布式系统中进行扩展,允许系统之间的通信跨越不同的节点和网络。
削峰填谷:举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
缺点:
延迟:如果多个消息排队等待处理,消息队列可能会引入延迟。特别是在高并发环境下,这种情况可能会更加明显。
性能:由于消息队列需要维护消息的持久性和可靠性,因此在处理大量消息时可能会面临性能问题。
复杂性:使用消息队列需要一定的技术知识和配置,这可能会增加系统的复杂性。
资源占用:处理大量的消息需要大量的内存和磁盘空间,这可能会对系统资源产生压力。
不支持实时性:消息队列主要用于异步通信,不支持实时性要求较高的场景。
3、什么是RabbitMQ
RabbitMQ
是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。RabbitMQ使用Erlang语言编写,这是一种高性能的编程语言,特别适合于分布式系统的开发。RabbitMQ的核心功能包括消息的发布与订阅、路由、可靠性、安全等。它主要用于实现应用程序之间的异步通信和解耦,允许一个应用程序(生产者)生成消息,而另一个应用程序(消费者)异步地消费这些消息。RabbitMQ支持多种客户端接口,包括Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP和STOMP等,因此可以与多种编程语言和平台集成。
此外,RabbitMQ在易用性、扩展性和高可用性方面表现出色,适用于需要处理大量消息和实现复杂消息路由的应用场景。
4、RabbitMQ模式
1、队列模式
一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者A,B那就是A,B总共会收到10条消息,不重复。
2、主题模式
对于Topic模式,一个发布者发布消息,有两个接收者A,B来订阅,那么发布了10条消息,A,B各收到10条消息。
3、RabbitMQ的模式
生产者生产消息后不直接直接发到队列中,而是发到一个交换空间:Exchange,Exchange会根据Exchange类型和Routing Key来决定发到哪个队列中,这个讲到发布订阅在详细来看
二、RabbitMQ安装
1、安装erlang
rabbitmq是erlang语言编写的,安装rabbitmq之前,需要先安装erlang。
bash
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#安装编译环境
yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
#切换到src目录
cd /usr/local/src
#下载erlang地址
https://packagecloud.io/rabbitmq/erlang?page=1
#curl下载erlang rpm包
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
#更新yum
yum -y update
#用yum安装
sudo yum install erlang socat
#验证
erl
2、下载安装RabbitMQ
(1)、下载rabbitmq
bash
#导入
#下载rabbitmq-server rpm包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
curl -s https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm.sh | sudo bash
#安装rabbitmq
rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
#设置开机自启动
systemctl enable rabbitmq-server
#开启rabbitmq-server服务
systemctl start rabbitmq-server
#关闭rabbitmq-server服务
systemctl stop rabbitmq-server
#查看状态
systemctl status rabbitmq-server
3、配置web界面
bash
# 停止rabbitmq
systemctl stop rabbitmq-server
# 停止开启web管理端
rabbitmq-plugins enable rabbitmq_management
# 然后启动rabbitmq就可以访问管理页面
systemctl start rabbitmq-server
#访问地址 现在访问不了 默认的账号:guest 密码:guest 只能在本地访问 需要添加账号
ip:15672
#####################
#如果开启web管理报错则
#修改/etc/hosts文件底部添加 一行 原有的不要改
#ip 主机名
192.168.91.70 tomcat
#重启系统 重新关掉防火墙和rabbitmq-server重新执行web端开启命令
rabbitmq-plugins enable rabbitmq_management
########################################
#添加账号设置权限
#这个是查看rabbitmq下面有多少用户
rabbitmqctl list_users
#增加账户admin并在设置admin的密码
rabbitmqctl add_user admin 密码
#设置admin的角色为管理员
rabbitmqctl set_user_tags admin administrator
#设置admin的权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#修改密码
rabbitmqctl change_password username password
#删除用户
rabbitmqctl delete_user username