【RabbitMQ】基本概念以及安装教程

embedded/2024/11/15 5:42:06/

1. 什么是MQ

MQ( Message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是消息(message)而已.消息可以非常简单,比如只包含文本字符串,JSON等,也可以很复杂,比如内嵌对象.MQ多用于分布式系统之间进行通信
系统之间的调用通常有两种方式: 一种是同步通信 另外一种是 异步通信

同步通信

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

异步通信

数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端.容器的一个具体实现就是MQ(message queue)

而Rabbit是MQ的一种实现

2. MQ的作用

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

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

3. MQ产品对比

M的实现肯定不止RabbitMQ一种,在使用的时候可以根据自己的业务需求和使用场景来选择最适合自己的技术。

1. Kafka
Kafka一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能,如果有日志采集需求,肯定是首选kafka了。
2.RocketMQ
RocketMQ采用Java语言开发,由阿里巴巴开源,后捐赠给了Apache.它在设计时借鉴了Kafka,并做出了一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在可用性、可靠性以及稳定性等方面都有出色的表现,适合对于可靠性比较高,且并发比较大的场景,比如互联网金融,但支持的客户端语言不多,且社区活跃度一般
3. RabbitMO
采用Erlang语言开发,MQ功能比较完备,且几乎支持所有主流语言,开源提供的界面也非常友好,性能较好,吞吐量能达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且并发没那么高的场景.

其实Rabbit的性能来说并算不上是顶尖的,但是其几乎支持所有语言,并且他有着很完善的社区,作为开发者在使用的过程中可以通过社区交流来解决自己使用技术的时候遇到的困难,这一点也是十分关键的。此外RabbitMQ的管理界面也是十分友好的.

4. RabbitMQ介绍

RabbitMQ 官⽹: RabbitMQ: One broker to queue them all | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/RabbitMQ是采用Erlang语言实现 AMQP(Advanced Message QueuingProtocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.

4.1 RabbitMQ安装(Ubuntu系统)

首先要在我们的服务器上安装erlang,毕竟Rabbit是使用Erlang来写的嘛,就像我们使用Java程序需要安装JDK是一样的道理。

#更新软件包
sudo apt-get update
#安装erlang
sudo apt-get install erlang

 使用 erl 命令查看erlang版本,出现上面的信息后就可以进行RabbitMQ的安装了。

# 安装RabbitMQ

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

 完成安装后,使用查看RabbitMQ的安装状态:# systemctl status rabbitmq-server

# 安装RabbitMQ的管理界面:rabbitmq-plugins enable rabbitmq_management

4.2 启动服务并访问

# 启动服务

sudo service rabbitmq-server start

# 通过IP:port访问界面

http://yourIP:15672/  为默认端⼝号, 云服务器需要开启端口
这里默认的用户名和密码都是guest,
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除 localhost 外的访问,那么就添加管理员用户吧。

4.3 添加管理员用户

操作RabbitMQ可以通过代码 或者界面 或者通过命令操作[rabbitmqctl] , 这里和我们熟悉的MySQL因为是挺像的。

# 添加用户admin 密码 password

# rabbitmqctl add_user ${账号} ${密码}
rabbitmqctl add_user admin admin

# 给用户添加权限

# rabbitmqctl set_user_tags ${ 账号 } ${ ⻆⾊名称 }
rabbitmqctl set_user_tags admin administrator

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

 # 访问


http://www.ppmy.cn/embedded/105405.html

相关文章

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》,作者是 Mohamad Taib Miskon 等人,发表在 2024 年 IEEE 自动控制与智能系统国际会议(I2CACIS)上。以下是该论文的主要…

【C++拓展(一)】后端开发常用的技术栈

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 C拓展 1. 前言2. 语言层面3. 设计模式层面4. 开…

9.03.

#include <iostream>using namespace std;/*-------------------------------------------------------------*/ class RMB {static int count; private:int yuan;int jiao;int fen; public://获得当前RMB数量static int RMBNUM(){return count;}RMB(){count;}RMB(int yu…

django学习入门系列之第十点《django中数据库操作--创建与删除表》

文章目录 django创建与删除表开始创建表创建指令新增表删除表删除列新增列修改报错提示语言总结 往期回顾 django创建与删除表 删除表 创建表 修改表 操作目录 开始创建表 class text_into(models.Model):name models.CharField(max_length32)password models.CharField…

三级_网络技术_54_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写路由器RG的路由表项。 目的网络/掩码长度输出端口__________S0&#xff08;直接连接&#xff09;__________S1&#xff08;直接连接&#xff09;__________S0__________S1__________S0__________S1 2.如果将10.10.67.128/2…

C++复习day02

一、库函数的模拟实现 1.memcpy的使用和模拟 首先先来了解一下memcpy函数的作用是什么&#xff1f; void * memcpy ( void * destination, const void * source, size_t num );函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在…

电脑连接公司服务器记住了账户密码,怎么换账户呢?

今天&#xff0c;有同事找到我&#xff0c;说共享连不上去了&#xff0c;我去试了下&#xff0c;知道了原因&#xff1a;由于我将之前使用这台电脑的人的账户在后台禁用了&#xff0c;所以这台电脑连不上服务器了&#xff0c;也不是连不上&#xff0c;而是之前是记住了账户密码…

Python使用总结之Flask-SocketIO介绍

Python使用总结之Flask-SocketIO介绍 一、Flask-SocketIO简介 Flask-SocketIO 是一个基于 Flask 的扩展库&#xff0c;用于在 Flask 应用中实现 WebSocket 通信。WebSocket 是一种双向通信协议&#xff0c;允许服务器和客户端之间在不重新建立连接的情况下进行实时数据交换。这…