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方法,并设置重回队列的参数。

相关推荐

  1. RabbitMQ如何保证消息丢失

    2024-06-06 09:32:09       34 阅读
  2. RabbitMQ 如何保证消息丢失

    2024-06-06 09:32:09       9 阅读
  3. RabbitMQ如何保证消息丢?

    2024-06-06 09:32:09       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 09:32:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 09:32:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 09:32:09       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 09:32:09       20 阅读

热门阅读

  1. 服务器硬件基础知识

    2024-06-06 09:32:09       8 阅读
  2. 深入理解HTTP与TCP:应用层与传输层的区分

    2024-06-06 09:32:09       12 阅读
  3. 【计算机网络】 传输层

    2024-06-06 09:32:09       11 阅读
  4. 在ros中获取话题的发布节点名称(C++)

    2024-06-06 09:32:09       9 阅读
  5. 多单页应用的构建优化-按entry拆分构建

    2024-06-06 09:32:09       12 阅读
  6. Linux云计算实践:OpenStack与云服务

    2024-06-06 09:32:09       9 阅读
  7. 探究Spring Boot中@PostConstruct注解的使用场景

    2024-06-06 09:32:09       5 阅读