RabbitMQ

简介: RabbitMQ


RabbitMQ

MQ定义

消息队列,遵循FIFO先进先出原理,实现上下游的逻辑解耦和物理解耦的消息通信服务,消息发送上游只需要依赖MQ,不需要依赖其他服务。

MQ应用场景

1.流量消峰

以逻辑图的形式进行展现

2.应用解耦

3.异步处理

MQ分类

1.ActiveMQ

优点:单机吞吐量万级,时效性MS(毫秒)级,基于主从架构实现高可用性,消息可靠性叫低的概率丢失数据(一般不会丢失数据)

缺点:官方社区现在对ActiveMQ 5x 维护越来越少,高吞吐量场景较少使用(阿帕奇公司)。

2.Kafka

大数据的杀手锏,大数据领域专用,为大数据而生的消息中间件,百万级TPS的吞吐量

优点:吞吐量高,时效性MS(毫秒)级可用性非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,有优秀的第三方kafka Web管理界面,日志领域比较成熟。

缺点:队列越多,load(加载)越高,发送消息响应时间变长,使用短轮询的方式,时效性取决于轮询间隔时间,消息失败不支持重试。

3.RocketMQ

阿里巴巴的开源产品,Java 语言实现,设计时参考了 Kafka,并做出了自己的-些改进,被阿里巴巴广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog 分发等场景。

优点:单机吞吐量十万级,可用性非常高,分布式架构,扩展性好,支持10亿级别的消息堆积。

缺点:支持客户端语言少,目前是java和c++,没有在 MQ核心中去实现JMS 等接口,有些系统要迁移需要修改大量代码。

4.RabbitMQ

是在AMQP(高级消息队列协议)基础上完成的,可重复的企业消息系统,当前最主流的消息中间件之一。

优点:由erlang(一浪)语言(开发的)的高并发特性,性能较好,吞吐量万级,功能比较完善,支持多种语言。

缺点:收费。

MQ消息应答方式

手动应答

Channel.basicAck(用于肯定)

RabbitMQ 已知道该消息并且成功的处理消息,可以将消息进行删除

Channel.basicNack(用于否定确认)

Channel.basicReject(用于否定确认)

与Channel.basicNack 相比少一个参数

不处理该消息直接拒绝,可以将消息进行删除

手动应答好处:可以批量应答并减少网络拥堵

自动应答

这种方式适用于在某种速率能够处理这些消息的情况下使用

MQ消息应答重新入队

逻辑图

MQ队列持久化

当RabbitMQ服务关闭,或者出现其他问题导致服务关闭时,此时MQ中的队列会丢失,为了避免丢失,在生产者创建消息队列时,将其设置为持久化,具体操作如下

我们只需要将queueDeclare方法中的第二个参数设置为true即可,再次回到rabbitMQ管理界面进行查看

队列:是MQ当中的一个组件叫队列,比如hello队列

消息:是生产者发送过来的数据

boolean durable = true;//需要让Queue(困 队列)进行持久化
channel.queueDeclare(task_queue_name,durable,false,false,null);

D就是持久化的标识,表示已经将当前队列设置为持久化,当我们重启rabbitMQ服务时,队列不会丢失

MQ消息持久化

将消息标记为持久化并不能完全保证不会丢失消息。告诉 RabbitMQ 将消息保存到磁盘

将basicPublish方法中第三个参数设置为MessageProperties.PERSISTENT_TEXT_PLAIN

//设置生产者发送的消息为持久化消息,将消息保存到磁盘中,一般保存到内存中
channel.basicPublish("",task_queue_name, MessageProperties.PERSISTENT_TEXT_PLAIN,massage.getBytes("UTF-8"));

MQ不公平分发

RabbitMQ发消息采用轮训分发消息(你一下我一下),假如两个消费者在执行任务,消费者1处理任务非常快,而消费者2处理任务非常慢,就会到这消费者1在处理完后,处于空闲状态,这种分配方式不是太好,我们只需要设置接收消息时要求信道设置basicQos(1),不是轮训分发,轮训分发默认为0

//设置不公平分发
channel.basicQos(1);

MQ发布确认

生产者将消息发送到MQ中,MQ将消息保存到磁盘后,告知生产者已经将消息保存到磁盘中

单个发布确认

同步确认发布的方式,发布完第一个后,等待确认消息收到后,在发送第二个

缺点:发布速度特别慢

批量发布确认

提高吞吐量,批量发布,出现问题后,不知道具体是哪个消息出现问题

异步发布确认

最佳性能和资源使用,在出现错误的情况下可以很好地控制。

RabbitMQ命令

安装erlang

需要RabbitMQ安装包私信我

rpm -ivh erlang-21.3-1.el7.x86_64.rpm

安装socat

yum install socat -y

安装RabbitMQ

rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm

设置RabbitMQ服务开机自动启动

chkconfig rabbitmq-server on

启动RabbitMQ服务

/sbin/service rabbitmq-server start
或者
systemctl restart rabbitmq-server

查看RabbitMQ状态

systemctl status rabbitmq-server
或者
/sbin/service rabbitmq-server status

关闭RabbitMQ服务

/sbin/service rabbitmq-server stop

查看RabbitMQ用户

rabbitmqctl list_users

查看防火墙状态

systemctl status firewalld

创建RabbitMQ用户

// 第一步:创建账号

rabbitmqctl add_user admin 123

// 第二步:设置用户角色

rabbitmqctl set_user_tags admin administrator

// 第三步:设置用户权限

rabbitmqctl set_permissions -p “/” admin “." ".” “.*”

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
SQL 人工智能 关系型数据库
AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践
AI Agent的规划能力需权衡自主与人工。阿里云RDS AI助手实践表明:开放场景可由大模型自主规划,高频垂直场景则宜采用人工SOP驱动,结合案例库与混合架构,实现稳定、可解释的企业级应用,推动AI从“能聊”走向“能用”。
855 39
AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践
|
Java 开发者 UED
Spring Boot的全局异常处理机制
【2月更文挑战第13天】
1074 0
|
9月前
|
前端开发 API 开发者
给Web开发者的HarmonyOS指南02-布局样式
本系列教程适合鸿蒙 HarmonyOS 初学者,为那些熟悉用 HTML 与 CSS 语法的 Web 前端开发者准备的。
374 5
给Web开发者的HarmonyOS指南02-布局样式
|
10月前
|
JSON API 开发者
淘宝淘口令转换API接口(淘宝API系列)
淘宝淘口令转换API是用于将淘宝商品或店铺链接与淘口令进行双向转换的接口,支持HTTP POST请求。开发者可通过此API生成或解析淘口令,方便在不同平台传播淘宝内容,吸引更多潜在客户。API返回JSON格式数据,包含转换结果和状态信息。使用前需注册并申请权限,确保调用稳定可靠。示例代码展示了如何通过Python实现淘口令的生成和解析功能。
|
机器学习/深度学习 存储 人工智能
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
EfficientTAM是Meta AI推出的轻量级视频对象分割和跟踪模型,旨在解决SAM 2模型在移动设备上部署时的高计算复杂度问题。该模型采用非层次化Vision Transformer(ViT)作为图像编码器,并引入高效记忆模块,以降低计算复杂度,同时保持高质量的分割结果。EfficientTAM在多个视频分割基准测试中表现出与SAM 2相当的性能,具有更快的处理速度和更少的参数,特别适用于移动设备上的视频对象分割应用。
375 9
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
|
机器学习/深度学习 编解码 搜索推荐
实测13个类Sora视频生成模型,8000多个案例,一次看个够
SORA-like模型是一类基于OpenAI的SORA模型发展而来的视频生成技术,以其在生成高质量视频上的卓越表现受到关注。该模型不仅提升了视频的分辨率、自然度和视觉语言对齐,还增强了对长视频序列的可控性。适用于内容创作、世界模拟等多种场景,展现出广泛的应用潜力。然而,模型在自动化评估、与人类偏好匹配及处理复杂运动上仍面临挑战。未来研究将聚焦于多模态、连续、交互式及个性化视频生成等领域。
864 2
|
运维 网络协议 网络安全
干货 | USG配置端口映射图解&映射不通的排查
干货 | USG配置端口映射图解&映射不通的排查
825 9
|
Docker 容器
使用rootfs制作docker容器镜像
使用rootfs制作docker容器镜像
|
分布式计算 Hadoop
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(二)
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(二)
814 0