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