mqtt中qos意义

博客介绍了MQTT中QoS的三种值,QoS=0为最多一次传输,QoS=1为至少一次传输,QoS=2为只有一次传输。还分析了QoS=1时收不到ACK消息的情况及处理办法,QoS=2的去重机制和msgId删除时机,最后提及了MQTT与RocketMQ的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mqtt中qos有三种值

qos = 0:最多一次的传输
qos = 1:至少一次的传输
qos = 2: 只有一次的传输

 

qos = 0

publisher  只发消息 ,不管有没有发送成功,即不等待mqtt broker的ack消息

 

qos = 1

publisher发送消息前,先存储消息msg,发送消息到 broker, 若未接收到ack消息,则会一直不停的重发。

那么我们要关注的是什么情况下会收不到 ack  消息,

1、首先考虑发送时网络不可用的情况

由于tcp协议,在发送之前如果网络不可用,发送方是能知道的,此时会报错,所以这种情况可以不用考虑。 

2、发送到 broker 之后,收到broker回复之前,网络故障

此时,由于publiser未收到ack,则会一直不停的重发,那么broker会再次处理这个相同的消息(发送给reciever)

那么reciever就要在业务层对此种情况进行处理

 

qos = 2 

qos = 2 (相当于qos =1加去重机制,猜测msgid生成规则和其他消息队列相同,clientid加时间戳)

与qos=1的区别是,broker缓存了msgId(消息id),如果收到相同消息,则不予处理。

此种情况的难点在于,msgId的删除时机。

1、publisher  发送msg 到broker

2、broker 回复 ack 到 publisher

---- 此时极端情况可能 1、2步骤重复多次---- (publisher 发送成功之后就断网,再继续发送,成功之后又断网)

3、publisher 告诉broker删除msgId

4、broker告诉publisher删除msg

 

mqtt与rocketmq的区别

mqtt采用push方式,rocketmq默认采用pull方式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值