• rabbitmq-保证发送消息可靠性-方案


    **发送消息(发送端-交换机-队列)**
    
    总结:只有当消息确认ack为true且未执行失败回调方法时,才保证发送端消息已经成功发送!
    执行失败回调方法时,说明消息已经发送到(broker)交换机,交换机路由到队列出现了问题。此时需要我们自己来解决 发送端信息成功到交换机确认机制: 前提:开启消息确认 connectionFactory.setPublisherConfirms(
    true); 如果成功,会给发送端一个为true的ack,表示发送成功! 如果失败,会给发送端一个为false的ack,表示发送失败! 代码如下: /** * 发送端是否发送到交换机 */ public class RabbitmqConfirm implements RabbitTemplate.ConfirmCallback { /** * 发送端回调方法 * @param correlationData 发送到mq时传入的业务参数(例如:业务id) * @param ack 结果标志 * true: 发送端 ——> 交换机 成功 * false:发送端 ——> 交换机 失败 * @param message 结果消息:ack为true时,返回为null * ack为false时,返回失败消息 */ @Override public void confirm(CorrelationData correlationData, boolean ack, String message) { System.out.println(correlationData.getId()); System.out.println(ack); System.out.println(message); } } 交换机信息成功路由到队列确认机制: 前提:开启消息确认 connectionFactory.setPublisherConfirms(true); 开启失败回调 rabbitTemplate.setMandatory(true); 如果成功,则不会调用失败回调方法! 如果失败,则会调用失败回调方法! 代码如下: /** * 交换机是否发送到队列 */ public class RabbitmqReturnConfirm implements RabbitTemplate.ReturnCallback { /** * 交换机发送队列失败回调: * * 采用一个不存在的routingKey可做测试 * @param message 发送的消息+消息配置信息 * @param replyCode 状态码 * @param replyText 状态内容 * @param exchange 交换机 * @param routingKey 路由键 */ @Override public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { System.out.println(message); System.out.println(replyCode); System.out.println(replyText); System.out.println(exchange); System.out.println(routingKey); } }



    依赖pom:
    
    
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-amqp</artifactId>
       <version>2.0.4.RELEASE</version>
      </dependency>
    
    
  • 相关阅读:
    java23种设计模式(五)--组合模式
    elasticsearch删除
    Jedis
    Redis主从复制(含哨兵模式)
    Redis持久化
    Redis基本知识(含数据类型)
    Linux学习(含有常用命令集)
    深入Kafka
    Kafka消费者
    Kafka生产者
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/12658531.html
Copyright © 2020-2023  润新知