Rabbitmq的可靠消息投递
一、背景 生产端向rabbitmq发送消息时,由于网络等原因可能导致消息发送失败。所以,rabbitmq必须有机制确保消息能准确到达mq,如果不能到达,必须反馈给生产端进行重发。 RabbitMQ消息的可靠性投递主要两种实现: 1、通过实现消费的重试机制,通过@Retryable来实现重试,可以设置重试次数和重试频率; 2、生产端实现消息可靠性投递。 两种方法消费端都可能收到重复消息,要求消费端必须实现幂等性消费。 二、消息投递到exchange的确认模式 rabbitmq的消息投递的过程为: producer ——> rabbitmq broker cluster ——> exchange ——> queue ——> consumer 1、生产端发送消息到rabbitmq broker cluster后,异步接受从rabbitmq返回的ack确认信息。 2、生产端收到返回的ack确认消息后,根据ack是true还是false,调用confirmCallback接口进行处理。 在application.yml中开启生产端confirm模式 spring: rabbitmq: publisher-confirms: true 实现ConfirmCallback接口中的confirm方法,ack为true表示消息发送成功,ack为false表示消息发送失败 @Component