RabbmitMQ学习笔记-RabbitMQ与SpringBoot2.0整合实战

简介: 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。

摘要


在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。


confirm 确认模式

return  退回模式


rabbitmq 整个消息投递的路径为: producer--->rabbitmq broker--->exchange--->queue--->consumer


消息从 producer 到 exchange 则会返回一个 confirmCallback 。

消息从 exchange-->queue 投递失败则会返回一个 returnCallback 。


我们将利用这两个 callback 控制消息的可靠性投递

一、SpringBoot 整合配置详解


1.1 生产端的几个关键参数


  • spring.rabbitmq.publisher-confirms=true
  • spring.rabbitmq.publisher-returns=true
  • spring.rabbitmq.template.mandatory=true20200917220901443.png

20200917221129279.png

1.2 生产端消息的确认和返回模式


public class RabbitSender {
  //自动注入RabbitTemplate模板类
  @Autowired
  private RabbitTemplate rabbitTemplate;  
  //回调函数: confirm确认
  final ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
      System.err.println("correlationData: " + correlationData);
      System.err.println("ack: " + ack);
      if(!ack){
        System.err.println("异常处理....");
      }
    }
  };
  //回调函数: return返回
  final ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {
    @Override
    public void returnedMessage(org.springframework.amqp.core.Message message, int replyCode, String replyText,
        String exchange, String routingKey) {
      System.err.println("return exchange: " + exchange + ", routingKey: " 
        + routingKey + ", replyCode: " + replyCode + ", replyText: " + replyText);
    }
  };
  //发送消息方法调用: 构建Message消息
  public void send(Object message, Map<String, Object> properties) throws Exception {
    MessageHeaders mhs = new MessageHeaders(properties);
    Message msg = MessageBuilder.createMessage(message, mhs);
    rabbitTemplate.setConfirmCallback(confirmCallback);
    rabbitTemplate.setReturnCallback(returnCallback);
    //id + 时间戳 全局唯一 
    CorrelationData correlationData = new CorrelationData("1234567890");
    rabbitTemplate.convertAndSend("exchange-1", "springboot.abc", msg, correlationData);
  }
  //发送消息方法调用: 构建自定义对象消息
  public void sendOrder(Order order) throws Exception {
    rabbitTemplate.setConfirmCallback(confirmCallback);
    rabbitTemplate.setReturnCallback(returnCallback);
    //id + 时间戳 全局唯一 
    CorrelationData correlationData = new CorrelationData("0987654321");
    rabbitTemplate.convertAndSend("exchange-2", "springboot.def", order, correlationData);
  }
}

1.3 消费端的几个参数


  • spring.rabbitmq.listener.simple.acknowledge-mode=manual
  • spring.rabbitmq.listener.simple.concurrency=5
  • spring.rabbitmq.listener.simple.max-concurrency=10

注意点:

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
6天前
|
存储 Java Maven
Spring Boot WebFlux 增删改查完整实战 demo
Spring Boot WebFlux 增删改查完整实战 demo
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的学习自律养成小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
1天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
16 5
|
4天前
|
消息中间件 Java 程序员
Spring Boot整合RabbitMQ
Spring Boot整合RabbitMQ
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现
基于SpringBoot+Vue的中医学习服务管理系统的详细设计和实现
31 13
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学习网站系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的学习网站系统的详细设计和实现(源码+lw+部署文档+讲解等)
22 5
|
7天前
|
消息中间件 Java Kafka
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生国学自主学习平台的详细设计和实现
基于SpringBoot+Vue的大学生国学自主学习平台的详细设计和实现
34 10
|
6天前
|
消息中间件 监控 Java
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
43 3
|
6天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校学习助手小程序的详细设计和实现(源码+lw+部署文档+讲解等)