RabbitMQ 如何保证消息不丢失

  1. 开启消息确认机制:

    在发布消息时,可以设置deliveryMode为2(持久化),以确保消息不会因为RabbitMQ的崩溃而丢失。

  2. 使队列持久化:

    通过设置durabletrue,可以确保队列在RabbitMQ重启后依然存在。

  3. 使消费者确认机制:

    启用手动确认模式,并在消费完消息后手动确认。

  4. 以下是使用Java和Spring AMQP的示例代码:

    @Bean
    public Queue myQueue() {
    return QueueBuilder.durable("myQueue").build();
    }

    @Bean
    public DirectExchange myExchange() {
    return new DirectExchange("myExchange");
    }

    @Bean
    public Binding myBinding() {
    return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey");
    }

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames("myQueue");
    container.setMessageListener(listenerAdapter);
    container.setAcknowledgeMode(AcknowledgeMode.MANUAL); // 手动确认模式
    return container;
    }

    @Bean
    public MessageListenerAdapter listenerAdapter(MyConsumer myConsumer) {
    return new MessageListenerAdapter(myConsumer, "handleMessage");
    }

    public class MyConsumer {
    public void handleMessage(Message message) {
    // 处理消息
    // ...

    复制代码
         // 确认消息
         channel.basicAck(envelope.getDeliveryTag(), false);
     }

    }

在发送消息时:

复制代码
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message, message -> {
    message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT); // 设置消息持久化
    return message;
});

确保你的消费者在处理完消息后调用basicAck来确认消息,这样即使消费者崩溃,未确认的消息也会被重新传递给另一个消费者。如果你希望在消费者异常时自动重新将消息放回队列,可以在handleMessage方法中捕获异常,并在异常处理逻辑中调用basicNackbasicReject方法,并设置重回队列的参数。

相关推荐
2501_941884612 小时前
能城市管理系统开发与多语言微服务实践:Python、Java、C++与Go全栈实现解析
rabbitmq
每天进步一点_JL2 小时前
事务与消息中间件:分布式系统中的可见性边界问题
分布式·后端
2501_941877983 小时前
Python在微服务高并发异步分布式配置中心与动态参数管理架构中的实践
rabbitmq
静若繁花_jingjing4 小时前
ZooKeeper & Nacos
分布式·zookeeper·云原生
wanhengidc4 小时前
云手机中分布式存储的功能
运维·服务器·分布式·游戏·智能手机·云计算
u***j3245 小时前
HarmonyOS分布式能力核心技术深度解析
分布式·华为·harmonyos
7***n755 小时前
HarmonyOS分布式数据管理
分布式·华为·harmonyos
2501_941879815 小时前
Python在微服务高并发异步缓存更新与数据一致性架构中的实践
rabbitmq
TracyCoder1235 小时前
Dubbo+Zookeeper怎么实现的服务注册与发现
分布式·zookeeper·dubbo
佛祖让我来巡山8 小时前
RabbitMQ 完整总结:架构、实战与可靠性保障
rabbitmq·消息队列可靠性