点关注,不迷路;持续更新Java相关技术及资讯!!!
1、
原理图:
消息确认:
说明:ACK是默认是自动,在消息发送给消费者后立即确认。所以若消费端消费业务逻辑抛出异常,会可能丢失消息。即便加入事务回滚了也只保证数据的一致性,而消息依然丢失。所以,若消费端未成功处理此条消息,消息就会丢失。
NONE(默认):自动;AUTO:根据情况确认;MANUAL:手动确认
2、
yml配置:
spring:
rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest #发送确认 对应RabbitTemplate.ConfirmCallback接口 publisher-confirms: true #发送失败回退,对应RabbitTemplate.ReturnCallback接口 publisher-returns: true #手动提交ack listener: direct: #NONE(默认):自动;AUTO:根据情况确认;MANUAL:手动确认 acknowledge-mode: manual simple: acknowledge-mode: manual
3、
config配置:
@Configurationpublic class RabbitConfig { /** * 定义一个队列 * @return */ @Bean public Queue okongQueue() { return new Queue("user"); } @Bean MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); } }
4、
发送端:
@Servicepublic class SenderService implements RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnCallback { @Autowired private RabbitTemplate rabbitTemplate; public void sendMq() throws InterruptedException { this.rabbitTemplate.setConfirmCallback(this); rabbitTemplate.convertAndSend("user