mq如何保证消息的幂等性

r囧r小猫 2022-10-01 11:51 302阅读 0赞

一:消息的发送流程

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDY5MDU1_size_16_color_FFFFFF_t_70

二、出现非幂等性的情况

1、生产者已把消息发送到mq,在mq给生产者返回ack的时候网络中断,故生产者未收到确定信息,生产者认为消息未发送成功,但实际情况是,mq已成功接收到了消息,在网络重连后,生产者会重新发送刚才的消息,造成mq接收了重复的消息

2、消费者在消费mq中的消息时,mq已把消息发送给消费者,消费者在给mq返回ack时网络中断,故mq未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息;

三、解决办法

1、mq接收生产者传来的消息:

mq内部会为每条消息生成一个全局唯一、与业务无关的消息id,当mq接收到消息时,会先根据该id判断消息是否重复发送,mq再决定是否接收该消息。

2、消费者消费mq中的消息:

也可利用mq的该id来判断,或者可按自己的规则生成一个全局唯一id,每次消费消息时用该id先判断该消息是否已消费过。

发表评论

表情:
评论列表 (有 0 条评论,302人围观)

还没有评论,来说两句吧...

相关阅读

    相关 如何保证接口

    为什么需要保证接口幂等性 因为在很多业务场景中,为了保证业务正确性,往往会出现重复请求或着重复消息的情况。特别是在分布式系统中,由于网络不稳定或者负载均衡等原因,可能会出

    相关 如何保证

    因为申请较晚,本公众号没留言,想交流的欢迎添加私人微信,一起相互吹捧,共同进步。![c58d1b29dad33f508ff4934d8c13f606.png][]1 幂等性

    相关 RabbitMQ如何保证

    幂等性是分布式系统设计中的一个重要概念,是在做系统或者接口设计时要着重考虑的问题,尤其像支付宝、银行、互联网金融等涉及钱的系统,既要高效,数据也要准确,绝对不能出现多扣款,多打

    相关 MQ如何实现

    一、缘起 如《[消息总线消息必达][Link 1]》所述,MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认   ![640_wx_f