rabbitmq高级特性 Consumer ACK

概念

手动确认 简单使用

编写配置文件 设置模式为手动

spring:
  rabbitmq:
    host: 192.168.198.129
    port: 5672
    username: admin
    password: admin
    virtual-host: /
    publisher-confirm-type: correlated
    publisher-returns: true
    listener:
      direct:
        acknowledge-mode: manual
      simple:
        acknowledge-mode: manual

实现监听者类

package com.jie;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class RabbitMQListener {
    @RabbitListener(queues = "boot_queue")
    public void ListenerQueue(Message message, Channel channel){
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
            //接受信息
            System.out.println(message);
            //处理业务逻辑
            System.out.println("处理业务逻辑----");
            //int i = 3/0;
            //手动确认
            channel.basicAck(deliveryTag, true);
        } catch (IOException e) {
            e.printStackTrace();
            //如果出现异常就拒绝确认
            //第三个参数为true时 则broker会重新发信息给消费者
            try {
                channel.basicNack(deliveryTag,true,true);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

这样如果业务逻辑抛出异常就会去执行拒绝确认 同时broker会重新发送信息给消费者

posted @ 2021-10-05 15:58  一个经常掉线的人  阅读(105)  评论(0编辑  收藏  举报