【RabbitMQ】安装详解 && 什么是MQ && RabbitMQ介绍

文章目录

Ubuntu环境安装

一、安装Erlang

bash 复制代码
RabbitMQ` 需要 `Erlang` 语言的支持,在安装 `RabbitMQ` 之前需要安装 `erlang
#更新软件包
sudo apt-get update
#安装erlang
sudo apt-get install erlang

查看erlang版本

bash 复制代码
root@hcss-ecs-0bb1:~# erl
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]

Eshell V10.6.4 (abort with ^G)

退出命令:

bash 复制代码
halt()

二、安装RabbitMQ

bash 复制代码
# 更新软件包
sudo apt-get update
# 安装rabbitmq
sudo apt-get install rabbitmq-server
# 确认安装结果
systemctl status rabbitmq-server

三、安装RabbitMQ管理界面

bash 复制代码
root@hcss-ecs-0bb1:~# sudo rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@hcss-ecs-0bb1:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@hcss-ecs-0bb1...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
root@hcss-ecs-0bb1:~#

四、启动服务并访问

① 启动服务并且查看状态

bash 复制代码
#启动rabbitmq
sudo service rabbitmq-server start

#查看状态
sudo systemctl status rabbitmq-server

② 添加管理员用户并添加权限

bash 复制代码
sudo rabbitmqctl add_user 账号 your_password
sudo rabbitmqctl set_user_tags 密码 administrator
sudo rabbitmqctl set_permissions -p / 账号 ".*" ".*" ".*"

RabbitMQ 用户角色分为 Administrator、Monitoring、Policymaker、Management、Impersonator、None 共六种角色

  1. Administrator超级管理员,可登陆管理控制台(启用managementplugin的情况下),可查看所有的信息,并且可以对用户、策略(policy)进行操作。
  2. Monitoring监控者,可登陆管理控制台(启用managementplugin的情况下),同时可以查看 rabbitmq 节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  3. Policymaker策略制定者,可登陆管理控制台(启用managementplugin的情况下),同时可以对 policy 进行管理。但无法查看节点的相关信息。
  4. Management普通管理者,仅可登陆管理控制台(启用managementplugin的情况下),无法看到节点信息,也无法对策略进行管理。
  5. Impersonator模拟者,无法登录管理控制。
  6. None其他用户,无法登陆管理控制台,通常就是普通的生产者和消费者。

③ 通过 IP:port 访问界面

http://云服务器地址:15672/,然后输入添加的账号密码即可!(15672为默认端口号,云服务器需要开启端口)

RabbitMQ的使用和配置

一、相关服务操作

bash 复制代码
# 启动服务
sudo systemctl start rabbitmq-server
# 停止服务
sudo systemctl stop rabbitmq-server
# 重启服务
sudo systemctl restart rabbitmq-server
# 添加开机启动服务
sudo systemctl enable rabbitmq-server
# 检查服务状态
sudo systemctl status rabbitmq-server

二、修改端口号

① 查找 rabbitmq 位置

bash 复制代码
[lucf@VM-8-12-centos ~]$ whereis rabbitmq
rabbitmq: /usr/lib/rabbitmq /etc/rabbitmq

② 新增配置文件 rabbitmq.conf

/etc/rabbitmq 路径下创建 rabbitmq.conf 文件,并添加以下内容:

bash 复制代码
# 修改client端口为8942(默认为5672)
listeners.tcp.default=8942
# 修改管理界面端口为8943(默认为15672)
management.tcp.port=8943

③ 修改 rabbitmq-defaults 文件,添加配置文件路径

文件路径:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.30/sbin/rabbitmq-defaults

编辑 rabbitmq-defaults,在文本最后添加如下代码

bash 复制代码
# 添加配置路径到文件中,保存退出
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf

三、卸载RabbitMQ

① 停止RabbitMQ服务

bash 复制代码
sudo systemctl stop rabbitmq-server

② 查找RabbitMQ安装情况

bash 复制代码
dpkg -l | grep rabbitmq

③ 卸载rabbitmq已安装的相关内容

bash 复制代码
sudo apt-get purge --auto-remove rabbitmq-server

④ 卸载Erlang

  1. 查看erlang安装的相关列表

    bash 复制代码
    dpkg -l | grep erlang
  2. 卸载erlang已安装的相关内容

    bash 复制代码
    sudo apt-get purge --auto-remove erlang

Windows操作RabbitMQ

将 RabbitMQ 可执行文件目录添加到环境变量中,方便下面指令执行,并且要用管理员身份执行

bash 复制代码
# 启动 RabbitMQ 服务(连同 Erlang)
net start RabbitMQ

# 停止 RabbitMQ 服务(完全关闭,包括 Erlang VM)
net stop RabbitMQ

# 设置 RabbitMQ 开机自启
sc config RabbitMQ start= auto

# 取消开机自启(手动启动)
sc config RabbitMQ start= demand

前言

​ Rabbit,兔子的意思

​ 互联网行业很多公司,都喜欢用动物命名产品,或者作为公司的logo,吉祥物。比如:腾讯的企鹅,京东的狗,美团的袋鼠,携程的海豚,阿里就更多了,蚂蚁,飞猪,天猫,菜鸟,闲鱼,盒马...更是以一己之力,组建了一个动物园...

Rabbit 也是一个公司名。MQmessage queue)消息队列的意思,RabbitMQRabbit 企业下的一个消息队列产品。

RabbitMQ 是一个实现了 AMQP 的消息队列服务,是当前主流的消息中间件之一。

AMQP ,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间件、开发语言等条件的限制。

什么是MQ

MQ(Message queue),从字面意思上看,本质是个队列FIFO 先入先出,只不过队列中存放的内容是消息(message)而已。消息可以非常简单,比如只包含文本字符串,JSON 等,也可以很复杂,比如内嵌对象。

MQ 多用于分布式系统之间进行通信。

系统之间的调用通常有两种方式:

  1. 同步通信

    1. 直接调用对方的服务,数据从一端发出后立即就可以达到另一端。
  2. 异步通信

    1. 数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端。

    2. 容器的一个具体实现就是MQ

RabbitMQ 就是 MQ 的一种实现!

MQ的作用

MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用

可以把 MQ 想象成一个仓库。采购部门进货之后,把零件放进仓库里,生产部门从仓库中取出零件,并加工成产品。MQ 和仓库的区别是,仓库里放的是物品,MQ 里放的是消息,仓库负责存储物品,并转发物品,MQ 负责存储和转发消息。

  1. 异步解耦:在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果。可以借助MQ把这些操作异步化,比如用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功。
  2. 流量削峰:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用MQ能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃。比如秒杀或者促销活动,可以使用MQ来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求。
  3. 消息分发:当多个系统需要对同一数据做出响应时,可以使用MQ进行消息分发。比如支付成功后,支付系统可以向MQ发送消息,其他系统订阅该消息,而无需轮询数据库。
  4. 延迟通知:在需要在特定时间后发送通知的场景中,可以使用MQ的延迟消息功能,比如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单
  5. ...

为什么选择RabbitMQ

目前业界有很多的 MQ 产品,例如 RabbitMQRocketMQActiveMQKafkaZeroMQ 等,也有直接使用 Redis 充当消息队列的案例,这些消息队列,各有侧重,也没有好坏,只有适合不适合,在实际选型时,需要结合自身需求以及 MQ 产品特征,综合考虑。

1. Kafka

Kafka 一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能,如果有日志采集需求,肯定首选 kafka

2. RocketMQ

RocketMQ 采用 Java 语言开发,由阿里巴巴开源,后捐赠给了 Apache

它在设计时借鉴了 Kafka,并做出了一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在可用性、可靠性以及稳定性等方面都有出色的表现。适合对于可靠性比较高,且并发比较大的场景,比如互联网金融。但支持的客户端语言不多,且社区活跃度一般。

3. RabbitMQ

采用 Erlang 语言开发,MQ 功能比较完备,且几乎支持所有主流语言,开源提供的界面也非常友好,性能较好,吞吐量能达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且并发没那么高的场景。

RabbitMQ介绍

RabbitMQ 官网:RabbitMQ: One broker to queue them all | RabbitMQ

RabbitMQ 是采用 Erlang 语言实现 AMQPAdvanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的。

在此之前,有一些消息中间件的商业实现,比如微软的 MSMQMicroSoft Message Queue),IBMWebSphere 等。但是他们价格太贵了,一般只应用于大型组织机构。

RabbitMQ 开发始于2006年,是由 Rabbit Technologies 开发并且提供商业支持的。之所以取名为Rabbit,是因为兔子行动非常迅速且繁殖起来非常疯狂,RabbitMQ 的开创者认为这个名字再合适不过了。

2010年4月,Rabbit TechnologiesVMware 旗下的 SpringSource 收购,在2013年5月被并入 Pivotal

其实 VMwarePivotal 本质上是一家的。不同的是,VMware 是独立上市子公司,而 Pivotal 是整合了 EMC 的某些资源,其中我们现在使用的 Spring 系列框架,就是 Pivotal 公司热门的产品之一。

直到后来 Pivotal 将其开源,RabbitMQ 才逐渐走向大众!

RabbitMQ 发展到今天,已经被越来越多的人认可,尤其是互联网公司,已经有着大规模的场景应用,这和它在易用性,扩展性,可靠性和高可用性等方面的卓越表现是分不开的。接下来我们就一起来深入了解一下 RabbitMQ

相关推荐
QQ_43766431410 小时前
kafka
分布式·kafka
是一个Bug10 小时前
Java后端开发面试题清单(50道) - 分布式基础
java·分布式·wpf
大猫和小黄10 小时前
Java ID生成策略全面解析:从单机到分布式的最佳实践
java·开发语言·分布式·id
ZePingPingZe11 小时前
CAP—ZooKeeper ZAB协议:从理论到实践的一致性与可用性平衡之道
分布式·zookeeper
掘金-我是哪吒11 小时前
完整的Kafka项目启动流程
分布式·kafka
indexsunny14 小时前
互联网大厂Java求职面试实战:Spring Boot微服务与Redis缓存场景解析
java·spring boot·redis·缓存·微服务·消息队列·电商
无心水14 小时前
【分布式利器:腾讯TSF】7、TSF高级部署策略全解析:蓝绿/灰度发布落地+Jenkins CI/CD集成(Java微服务实战)
java·人工智能·分布式·ci/cd·微服务·jenkins·腾讯tsf
Yeats_Liao1 天前
MindSpore开发之路(二十四):MindSpore Hub:快速复用预训练模型
人工智能·分布式·神经网络·机器学习·个人开发
IT大白1 天前
2、Kafka原理-Producer
分布式·kafka