• RabbitMQ如何保证消息的可靠性


    一:介绍

    消息的可靠传输一般是指业务系统接入消息中间件时需要考虑的问题。

    二:消息传输示意图

    三:消息可能丢失的几种情况

    (1)、消息从生产者传输到中间件的过程中,可能网络断开,消息丢失;

    (2)、消息到达中间件的交换器后,路由不到匹配的队列中,消息丢失;

    (3)、消息在队列中还未被消费者消费时,中间件服务器宕机,消息丢失;

    (4)、消息从队列传输到消费者的过程中,可能网络断开,消息丢失;

    四:保证消息可靠传输的几种解决方案(对应三中的消息可能丢失的情况)

    (1)、生产者开启事务机制或者confirm机制,确保消息可靠的传输到RabbitMQ中;

    (2)、生产者配合使用mandatory参数或者设置备份交换器来确保找不到队列的消息返回生产者或者存到备份队列中;

    (3)、将队列和消息都进行持久化处理,确保中间件服务器宕机后,重启服务器消息不丢失;

    (4)、消费者在订阅队列时,设置成手动确认模式,保证只将消费者消费后的消息从队列中删除;

    五:消息传输保证级别

    消息中间件的消息传输保证一般分为三个级别:

    (1)、最少一次:消息绝对不会丢失,但可能会重复;这种情况下,需要做到四中说明的4点,才能保证消息“最少一次”到达消费者;

    (2)、最多一次:消息可能会丢失,但绝对不会重复;这种情况下,就比较随意,四中说明的4点无须考虑,生产者随意发送,消费者随意消费;

    (3)、恰好一次:每条消息肯定会被传输一次且仅传输一次;这种情况需要在“最少一次”的前提下,保证消息仅被消费一次;如果中间件给生产者发送收到确认时网络断开,则生产者认为消息没有达到中间件,还会再次发送消息给中间件,这样消息就重复了;如果消费者给中间件发送消费确认时网络断开,则中间件会认为消费者没有正常消费消息,还会将消息再次发送给消费者,这样消息也重复了;所以需要对消息进行去重;而中间件是没有去重机制的,去重需要在业务端根据自身业务特性来进行。

  • 相关阅读:
    《PS技巧精华全部在这里!》
    c#的dictionary为什么在扩容时会以素数扩容
    初识Lua
    常用的排序
    像gal一样讲故事~
    打枪的实现
    武器的方向,人物和武器的翻转
    虚拟摇杆的修改
    实现虚拟摇杆的移动
    itemPool和MessageCenter
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302419.html
Copyright © 2020-2023  润新知