springboot rabbitmq 接收发送消息 rabbitmq发送消息确认_唯一标识

**

1.发送消息确认:

**
 RabbitMQ投递信息过程:
 producer->rabbitmq broker cluster->exchange->queue->consumer模式一:
 confirmCallBack确认模式
 message 从 producer 到 rabbitmq broker cluster 则会返回一
 个 confirmCallback1.配置文件application.properties配置:
 #确认消息是否发送到交换机
 #已弃用 spring.rabbitmq.publisher-confirms = true
 spring.rabbitmq.publisher-confirm-type=simple

springboot rabbitmq 接收发送消息 rabbitmq发送消息确认_发送消息_02

模式二:

returnCallBace未投递到queue退回模式
 message 从 exchange->queue 投递失败则会返回一
 个 returnCallback 。我们将利用这两个 callback 控制消息的最终一致性和部分纠
 错能力。
 spring.rabbitmq.publisher-returns = true

springboot rabbitmq 接收发送消息 rabbitmq发送消息确认_spring_03

spring.rabbitmq.publisher-confirm-type=三种类型:==========
NONE值是禁用发布确认模式,是默认值
CORRELATED值是发布消息成功到交换器后会触发回调方法,如1示例
SIMPLE值经测试有两种效果,其一效果和CORRELATED值一样会触发回调方法,其二在发布消息成功后使用rabbitTemplate调用waitForConfirms或waitForConfirmsOrDie方法等待broker节点返回发送结果,根据返回结果来判定下一步的逻辑,要注意的点是waitForConfirmsOrDie方法如果返回false则会关闭channel,则接下来无法发送消息到broker;
**

2.接收消息确认:

**

ACK机制,默认是自动的,自动确认会在消息发送给消费者后立即确认,但存在消息丢失的

可能。比如消费端发生了异常之类的。

消息确认模式:
 none:自动确认
 auto:根据情况确认
 manual:手动确认
 spring.rabbitmq.listener.simple.acknowledge-mode=manual

springboot rabbitmq 接收发送消息 rabbitmq发送消息确认_发送消息_04

basicAck方法,需要传递两个参数:
deliveryTag(唯一标识ID):当一个消费者向 RabbitMQ 注册后,会建立起一个
Channel ,RabbitMQ 会用 basic.deliver 方法向消费者推送消息,这个方法携带了一个
、delivery tag, 它代表了 RabbitMQ 向该 Channel 投递的这条消息的唯一标识 ID,是一个
单调递增的正整数,delivery tag 的范围仅限于 Channel
multiple:为了减少网络流量,手动确认可以批处理,当该参数为true的时候,则可以
一次性确认delivery_tag小于等于传入值的所有消息。为false的时候则不启动批处理确认;

basicNack方法,需要传递三个参数:
deliveryTage(唯一标识):解释如上
multiple:解释如上
requeue:true重回队列;false丢弃,我们在nack中必须设置false,否则重发没有任何
意义。

basicReject方法,需要传递两个参数:
deliveryTage(唯一标识):解释如上
requeue:解释如上