springboot整合rabbitmq,开启手工确认。保证消息100%投递


在Spring Boot应用中整合RabbitMQ,以确保消息100%投递,是一个关键的实践,特别是对于那些需要高可靠性和数据一致性的系统。RabbitMQ是一个流行的开源消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供可靠的消息传递功能。下面将详细解释如何在Spring Boot中配置RabbitMQ,并启用手动确认机制来增强消息的可靠性。 我们需要在Spring Boot项目中引入RabbitMQ的相关依赖。这通常通过在`pom.xml`或`build.gradle`文件中添加Spring AMQP的依赖完成。对于Maven项目,可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 接下来,我们需要配置RabbitMQ的相关属性。这可以在`application.properties`或`application.yml`中完成。例如: ```properties spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ``` 现在,让我们创建一个RabbitMQ的配置类,定义连接工厂、交换机、队列和绑定。这里我们使用`@Configuration`注解来声明这是一个配置类: ```java @Configuration public class RabbitConfig { @Value("${spring.rabbitmq.queue.name}") private String queueName; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory factory = new CachingConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); return factory; } @Bean public AmqpAdmin amqpAdmin() { return new RabbitAdmin(connectionFactory()); } @Bean public SimpleMessageListenerContainer container() { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory()); container.setQueueNames(queueName); container.setMessageListener(messageListenerAdapter()); return container; } @Bean public MessageListenerAdapter messageListenerAdapter() { return new MessageListenerAdapter(new RabbitReceiver()); } @Bean public Queue queue() { return new Queue(queueName, true); // durable 队列,保证重启后仍然存在 } @Bean public DirectExchange exchange() { return new DirectExchange("exchange-name", true, false); // durable 交换机 } @Bean public Binding binding(Queue queue, DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(queueName); } } ``` 在上述配置中,我们定义了一个名为`queueName`的队列,一个`exchange-name`的直接交换机,并将它们绑定在一起。`RabbitReceiver`是一个自定义的类,用于处理接收到的消息。 为了实现消息100%投递,我们需要启用消费者的手动确认模式(`channel.confirmSelect()`)。在Spring Boot中,我们可以通过扩展`SimpleMessageListenerContainer`来实现这一点: ```java @Configuration public class RabbitConfigWithManualAck extends SimpleMessageListenerContainer { public RabbitConfigWithManualAck(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { super(connectionFactory, listenerAdapter); setAcknowledgeMode(AcknowledgeMode.MANUAL); } @Override protected void doStart() throws Exception { super.doStart(); Channel channel = getChannel(); if (channel != null) { channel.confirmSelect(); } } } ``` 在`RabbitReceiver`类中,我们需要实现`ChannelAwareMessageListener`接口,并在`onMessage`方法中处理消息并发送确认: ```java @Service public class RabbitReceiver implements ChannelAwareMessageListener { @Override public void onMessage(Message message, Channel channel) throws Exception { try { // 处理消息,例如:业务逻辑 // ... // 确认消息已被成功处理 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); } catch (Exception e) { // 如果处理消息时发生异常,可以拒绝消息,让它重新入队 channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); } } } ``` 通过这种方式,我们确保了消息只有在成功处理后才会被确认,如果处理过程中出现任何问题,消息将被拒绝并重新投入队列。这样,我们就能达到Spring Boot整合RabbitMQ并开启手工确认,保证消息100%投递的目标。 以上就是关于Spring Boot与RabbitMQ整合以及手动确认机制的详细解释,希望对您有所帮助。在实际开发中,您可能还需要根据具体需求调整配置,例如设置超时时间、处理失败后的重试策略等。





































































- 1


- 粉丝: 80
- 资源: 12
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- RFID技术入门与应用开发基础教程
- AI大模型学习与使用入门基础教程
- Linux编程环境配置与维护
- 大学生实验报告编写基础教程
- DeepSeek:基于深度学习的智能搜索项目基础教程
- 基于Python的实验室管理系统的设计与实现(论文+源码)-kaic.doc
- (源码)基于HTML的视频解析播放系统.zip
- 基于python的五子棋游戏设计与实现(文档+源码)-kaic.docx
- (源码)基于NuvotonM487微控制器的UART通信系统.zip
- (源码)基于C++的植物大战僵尸随机事件墙.zip
- (源码)基于C++的Dreame D9机器人声效播放系统.zip
- (源码)基于AVR单片机的半挂车控制系统.zip
- (源码)基于Arduino的智能小车控制系统.zip
- (源码)基于WebRTC协议的音视频通讯系统.zip
- (源码)基于React框架的Web3工具网站.zip
- (源码)基于原生JavaScript和Echarts的数据可视化面板项目.zip


