跳至主要內容
RabbitMQ:消息丢失、消息重复、消息积压的原因和解决方案

两个概念

RabbitMQ避免消息丢失的方法主要是利用消息确认机制和手动签收机制,所以有必要把这两个概念搞清楚。

1、消息确认机制

主要是生产者使用的机制,用来确认消息是否被成功消费。

配置如下:

spring: 
    rabbitmq:
        address: 192.168.x.x:xxxx
        virtual-host: /
        username: guest
        password: guest
        connection-timeout: 5000
        publisher-confirms: true # 消息成功确认
        publisher-returns: true # 消息失败确认
        template: 
            mandatory: true # 手动签收机制

junziln原创2025年5月19日大约 9 分钟RabbitMQRabbitMQ
可配置的幂等性校验方案实现

下面提供一个完整的、可灵活选择不同哈希算法的幂等性校验实现,包含三种实现方案:SipHash、MD5和原始字段拼接。

1. 接口设计

IdempotentChecker.java

java

复制

/**
 * 幂等性校验接口
 */
public interface IdempotentChecker {
    /**
     * 检查消息是否重复
     * @param message 原始消息
     * @return true-重复消息, false-首次处理
     */
    boolean isDuplicate(String message);
    
    /**
     * 生成校验Key
     * @param message 原始消息
     * @return 用于幂等校验的Key
     */
    String generateKey(String message);
}

junziln原创2025年5月19日大约 4 分钟RabbitMQRabbitMQ