当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/358690.html

相关文章:

  • 【技术突破】合合信息新品震动业界,TextIn智能抽取,是不是藏了黑科技?
  • Transformer模型学习(1)
  • TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇
  • 渗透课程第二阶段--Part1--信息收集
  • ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 负载均衡)
  • QT 编译Lua 动态库,使用Lua脚本混合编程
  • 关于不均衡数据的探究
  • LwIP 之十 详解 TCP RAW 编程、示例、API 源码、数据流
  • 【京东评论】数据源——Python提升获取效率▼
  • Java大厂面试题第2季
  • 探索无限可能性——微软 Visio 2021 改变您的思维方式
  • Linux CFS调度器之周期性调度器scheduler_tick函数
  • git生成密钥(免密)
  • 山东大学软件学院2021级编译原理回忆版
  • 为什么都说视频号小店值得做,具体该怎么做?新手必学
  • 网络安全岗秋招面试题及面试经验分享
  • 如何实现一个AI聊天功能
  • 实战16:基于apriori关联挖掘FP-growth算法挖掘关联规则的手机销售分析-代码+数据
  • Linux基础指令及其作用之系统信息和管理
  • FinRobot:一个由大型语言模型(LLM)支持的新型开源AI Agent平台,支持多个金融专业AI Agent
  • 【SQL学习进阶】从入门到高级应用(七)
  • 20231911 2023-2024-2 《网络攻防实践》实践十一报告
  • 5G专网驻网失败分析(suci无效)
  • 【PHP项目实战训练】——laravel框架的实战项目中可以做模板的增删查改功能(1)
  • go语言使用model Gorm MySQL查询数据 定时十分钟查询一次 查询十分钟前新建的数据
  • 透视AI技术:探索折射技术在去衣应用中的奥秘
  • 计算机网络工程师需要掌握的知识点
  • Java-Collection家族(List接口)
  • 成绩发布小程序哪个好用?
  • 如何让大模型在智能时代背景下更加先进:一种基于时代特征的探讨