MQ的了解

article/2025/9/20 23:06:24

MQ的了解:

如果进行产品选型

Kafka

优点:吞吐量非常大,性能非常好,集群高可用。

缺点:会丢数据,功能比较单一

使用场景:日志分析、大数据采集
RebbitMQ

优点:消息可靠性高,功能全面。

缺点:吞吐量比较低,消息积累会严重影响性能。erlang语言不好定制。

使用场景:小规模场景。

RocketMQ (阿里产品)

优点:高吞吐、高性能、高可用,功能非常全面。

缺点:开源版功能不如云上商业版。官方文档和周边生态还不够成熟。客户端只支持java
使用场景:几乎是全场景。

rabbitmq的镜像队列原理(需要集群)

在这里插入图片描述

如何保证消息的顺序?

全局有序和局部有序:MQ只需要保证局部有序,不需要保证全局有序。
生产者把一组有序的消息放到同一个队列当中,而消费者一次消费整个队列当中的消息。
RocketMQ中有完整的设计,但是在RabbitMQ和Kafka当中,并没有完整的设计,需要自己进行设计。
RabbitMQ:要保证目标exchange只对应一个队列。并且一个队列只对应一个消费者。
Kafka:生产者通过定制partition分配规则,将消息分配到同—个partition。Topic下只对应一个消费者。

rabbitmq的死信队列、延迟队列原理

延迟队列可以说是死信交换机+ttl
死信消息:

1.消息被消费方否定确认,使用 channel.basicNack 或 channel.basicReject,并且此时 requeue 属性被 设置为false。
2. 消息在队列的存活时间超过设置的TTL时间。
3. 3. 消息队列的消息数量已经超过最大队列长度。 那么该消息将成为死信消息。如果配置了死信队列信息,那么该消息将会被丢进死信队列中,如果没有配置,则该 消息将会被丢弃

为每个需要使用死信的业务队列配置一个死信交换机,同一个项目的死信交换机可以共用一个,然后为每个业务队 列分配一个单独的routeKey,死信队列只不过是绑定在死信交换机上的队列,死信交换机也不是什么特殊的交换 机,只不过是用来接受死信的交换机,所以可以为任何类型 【Direct. Fanout. Topic]

TTL:一条消息或者该队列中的所有消息的最大存活时间

如果一条消息设置了TL属性或者进入了设置TTL属性的队列,那么这条消息如果在TTL设置的时间内没有被消费, 则会成为”死信”。如果同时配置了队列的TTL和消息的TTL,那么较小的那个值将会被使用。 只需要消费者一直消费死信队列里的消息

rabbitmq可以直连队列么?

生产者和消费者使用相同的参数声明队列。重复声明不会改变队列

RabbitMQ如何保证消息的可靠性传输
1、使用事务消息
2、使用消息确认机制

发送方确认:

channel设置为confirm模式,则每条消息会被分配一个唯一id
消息投递成功,信道会发送ack给生产者,包含了id,回调ConfirmCallback接口
如果发生错误导致消息丢失,发生nack给生产者。回调ReturnCallback接口
ack和nack只有一个触发,且只有一次,异步触发。可以继续发送消息

接收方确认:

声明队列时,指定noack=false, broker会等待消费者手动返回ack、才会删除消息,否则立刻删除
broker的ack没有超时机制,只会判断链接是否断开,如果断开、消息会被重新发送

RabbitMQ如何确保消息发送?消息接收?(异步)

发送方确认机制:

信道需要设置为 confirm 模式,则所有在信道上发布的消息都会分配一个唯一ID。

一旦消息被投递到queue(可持久化的消息需要写入磁盘),信道会发送一个确认给生产者(包含消息唯一ID).

如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(未确认)消息给生产者。

所有被发送的消息都将被 confirm(即 ack) 或者被nack一次。但是没有对消息被 confirm 的快慢做任何保证,并 且同一条消息不会既被 confirm又被nack

发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以维绩发送消息。当确认消息到达生产者,生产者的回调 方法会被触发。

Confirmcallback接口:只确认是香正确到达 Exchange 中,成功到达则回调 Returncallback接口:消息失败返回时回调

接收方确认机制:

消费者在声明队列时,可以指定noAck参数,当noAck=false时,RabbitMQ会等待消费者显式发回ack信号后才从内存 (或者磁盘,持久化消息中移去消息。香则, 消息被消费后会被立即删除。

消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitmQ 才能安全地把消思从队列中删除。

RabbitMQ不会为未ack的消息设買超时时间,它判断此消,息是香需要重新投递给消费者的唯一依据是消费该消息的消费者 连接是否已经断开。这么设计的原因是RabbitwQ允许消费者消效一条消忌的时间可以很长。保证数据的最终一致性:
如果消费者返回ack之前街开了链接,RabbitwQ 会重新分发给下一个订阅的消费者。〈可能存在消息重复消费的的惠, 需要去重)
可以key为唯一id 存储reids中
(确保数据的一直 ,限流) tcp长链接

RabbitMQ事务消息

RabbitMQ事务消息

通过对信道的设置实现

  1. channel.txSelect0;通知服务器开启事务模式;服务端会返回Tx.Select-ok
  2. channel.basicPublish;发送消息,可以是多条,可以是消费消息提交ack
    1. channel.txCommit0提交事务;
  3. channel.txRollbacko回滚事务;

消费者使用事务:

  1. autoAck=false,手动提交ack,以事务提交或回滚为准;
  2. autoAck=true,不支持事务的,也就是说你即使在收到消息之后在回滚事务也是于事无补的,队列已经把消 息移除了

如果其中任意一个环节出现问题,就会拋出loException异常,用户可以拦截异常进行事务回滚,或决定要不要重 复消息。

事务消息会降低rabbitmq的性能(事务消息会发送到临时队列中)

RocketMQ 如何保证不丢消息

生产者:

同步阻塞的方式发送消息,加上失败重试机制,可能broker存储失败,可以通过查询确认 • 异步发送需要重写回调方法,检查发送结果_ ack机制,可能仔储COrTTTictug,存储ConsumerQueue失败,此时对消费者不可见

broker:同步刷盘、集群模式下采用同步复制、会等待slave复制完成才会返回确认

消费者:

offset手动提交,消息消费保证幂等


http://chatgpt.dhexx.cn/article/H0JxNqqJ.shtml

相关文章

多级反馈队列调度算法(MFQ)

多级反馈队列调度算法是目前公认的较好的一种进程调度算法,它能较好的满足各类进程的需要。 MFQ算法首先设置多个就绪队列。队列的优先级递减,且各队列时间片大小也不同。例如我实现的算法里,设置了3个队列,第一队列优先级>第二队列>第三队列,且后一个队列的时间片大…

从MFQ方法到需求分析

前几天看了一篇性能测试相关的文章:性能测试模型初探及应用方法分析,其中提到了MFQ分析方法。专门去查阅了MFQ相关的一些资料,学习了一番。 之后想起了以前看《Google的软件测试之道》这本书时,书中提到的一种测试分析方法&#x…

nRF24l01无线传输

模块简介: 它是一款工作于2.4GHZ~2.5GHZISM频段,带功放通信距离可达上千米,近距离传输速度可达2Mbps,具有6通道且每通道都有自己的缓冲区,可以同时跟不同的NFR进行通信的无线收发模块。 工作模式:接收模式…

C51- NRF24L01 无线串口模块

1.硬件知识 1.1 nRF24L01的引脚功能 (IO方向是相对模块而言的) CE:Chip Enable,芯片使能,在发送和接收过程中都要将这个引脚拉高。 IRQ: 低电平触发,当状态寄存器中 TX_DS、RX_DR 或 MAX_RT 为高时触发中断…

NRF24L01+模块实现双向通信(带ACK payload)

本文主要关于NRF24L01 2.4GHz无线模块的应用。 目录 说明模块开发的大致步骤使用方式一、单向通信二、双向通信(有应答包(ACK payload))寄存器配置 三、星状组网 注意事项 说明 1、NRF24L01和NRF24L01的区别,前者支持Enhanced ShockBurst™,后者不支持…

2.4G模块NRF24L01调试经验

参照野火STM32程序调试NRF24L01成功,颇获喜感 nRF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurstTM模式控制器、功率放大器、警惕振荡器、调制器、解调器。输出功率、频道选择和协议的…

小体积、高速率的nRF24L01芯片通信模块

在选择纯硬件通信模块时, 面对上述问题,AS01提供了很好的解决办法。 AS01系列模块是工作在2.4GHz(ISM频段)的纯硬件模块。此系列基于NORDIC原装nRF24L01P芯片方案开发,提供多种接口形式,具有高空速(最高空速可达到2…

Arduino使用NRF24L01模块进行无线通信

Arduino使用NRF24L01模块进行无线通信 前言 ​ 其实CSDN有很多关于这个无线模块的使用,包括Arduino的使用例程,但是实际自己跟着做一遍的时候还是发现了有些小问题,于是记录一下方便以后做其他有意思的小项目。(Arduino的库文件…

nRF24L01--2.4G无线通信模块(1)(51单片机和51单片机通信)

作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 或者 https://blog.csdn.net/Kevin_8_Lee/article/details/95667604 欢迎转载,但也请保留上面这段声明。谢谢!(上面两个都是我的博客,只是在不同平台…

STM32控制NRF24L01无线模块进行通信

一.NRF2401无线模块 1.模块介绍 功能介绍 (1)2.4Ghz 全球开放ISM 频段免许可证使 2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,特别适合工业控制场合 (3)126 频道,满足多点通信和跳频通信需要 (4) 内置硬件CRC 检错和点对…

NRF24L012.4G模块

文章目录 datasheet1. 相关案例:2. nRF24L01通信的常识1. 发送模式。1.5 补充spi一点知识1. SPI读写时序2. 工作模式2.1 收发模式Enhanced ShockBurstTM收发模式Enhanced ShockBurstTM发送流程:Enhanced ShockBurstTM接收流程: 3. SPI指令 3.…

STM32驱动NRF24L01无线模块

目录 一、模块简介二、工作模式三、主要命令四、配置寄存器五、状态寄存器六、接收模式七、发送模式八、STM32使用NRF24L01模块 一、模块简介 NRF24L01是NORDIC公司生产的一款无线通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst 协议&…

nRF24L01无线模块笔记

nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据传输. nRF24L01是一个能兼顾距离和数据速率的无线模块, 在空旷环境下,2M速率15米, 1M速率30米, 250K速率能达到50米. 和蓝牙…

NRF24L01+模块:一对一双向通信,成功!

查找了很多资料,好多都是复制粘贴转发,或者安装英文手册直译的(比如我自己上篇笔记,,),看完还是一脸懵逼,没几个可行的,推荐几个比较实在的资料:手册我也不是…

NRF24L01 无线通信模块使用方法

原文出处:http://blog.csdn.net/mc_hust/article/details/39473913 昨天登录百度账号,无意间发现漏看了好多朋友的私信,其中不少是找我探讨关于NRF2401模块的。从12年到14年的信件都有(平时很少注意系统提示信息。。。&#xff0…

STM32 + 无线通信模块 NRF24L01 数据收发

NRF24L01的模块资料,网上已很详尽了,在这不再重复描述知识点了。 这篇文章的目的,旨在把主要知识点胶接起来,梳理成一套完整的步骤,使器件快速上手汇入工作使用。 将按操作顺序,拆分成7个步骤,…

NRF24L01 无线模块

NRF24L01 简介 NRF24L01 可以实现点对点或者是1(收)对6(发)的无线通信。NRF24L01 采样SPI通信,很方便连接MCU NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下: 1&a…

NRF2401模块

一、模块介绍 (1) 2.4Ghz 全球开放 ISM 频段免许可证使用 (2) 最高工作速率 2Mbps,高效 GFSK 调制,抗干扰能力强,特别适合工业控制场合 (3) 126 频道,满足多点通信和跳频通信需要 (4) 内置硬件 CRC 检错和点对多点通信地址控制…

Nrf24l01无线模块

Nrf24l01无线模块 一,模块介绍 二,接口电路, 模块连接注意点: (1) VCC 脚接电压范围为 1.9V~3.6V 之间,不能在这个区间之外,超 过 3.6V 将会烧毁模块。推荐电压 3.3V 左右。 (2) 除电源 VCC 和接地端&…

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信 NRF24L01一、简介二、引脚功能描述 程序设计一、对 24L01 的程序编程的基本思路如下:二、Tx 与 Rx 的配置过程1、Tx 模式初始化过程:2、Rx 模式初始化过程: 三、基本程序函数…