- 以下例子代码可在github或者在gitee下载
github:代码链接
gitee:代码链接 - 前两篇博文:
springboot rabbitmq入门使用
springboot rabbitmq不同交换机类型实战
RabbitMQ的高可用主要体现在消息的发送、传输和接收的过程中,可以保证消息成功发送、不会丢失,以及被确认消费/不重复消费。
- 对于消息是否发送成功,主要是针对生产者端的消息生产确认机制;
- 对于消息不会丢失,主要是rabbitmq消息持久化机制;
- 对于消息确认消费/不重复消费,主要是针对消费者端对消息的确认消费机制。
一、消息生产确认机制
对于消息是否发送成功,在rabbitmq自定义操作组件中可以统一设置消息生产确认相关逻辑rabbitTemplate.setConfirmCallback和rabbitTemplate.setReturnCallback。
@Slf4j
@Configuration
public class RabbitmqConfig {
//自定义配置RabbitMQ发送消息的操作组件RabbitTemplate
@Bean
public RabbitTemplate rabbitTemplate(){
//设置“发送消息后进行确认”
connectionFactory.setPublisherConfirms(true);
//设置“发送消息后返回确认信息”
connectionFactory.setPublisherReturns(true);
//构造发送消息组件实例对象
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMandatory(true);
//发送消息后,如果发送成功,则输出“消息发送成功”的反馈信息
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> log.info("消息发送成功:correlationData({}),ack({}),cause({})", correlationData,ack,cause));
//发送消息后,如果发送失败,则输出“消息发送失败-消息丢失”的反馈信息
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> log.info("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}",exchange,routingKey,replyCode,replyText,message));
//定义消息传输的格式为JSON字符串格式
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
//最终返回RabbitMQ的操作组件实例RabbitTemplate