package com.muyu.common.rabbit.callback;

import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

/**
 * @author Lenovo
 * @Description 消息发送到broker确认回调
 */

@Slf4j
@Component
public class ConfirmCallback implements RabbitTemplate.ConfirmCallback {

    @Resource
    private RabbitTemplate rabbitTemplate;

    /**
     * 初始化
     */
    @PostConstruct
    public void init() {
        this.rabbitTemplate.setConfirmCallback(this);
    }

    /**
     * 回调确认方法（消息发送之后 消息无论发送成功还是失败都会执行这个回调方法）
     * @param correlationData 回调的相关数据
     * @param ack 确认结果（true表示消息已经被broker接收，false表示消息未被broker接收）
     * @param cause 失败原因（当ack为false时，表示拒绝接收消息的原因；当ack为true时，该值为空）
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if (ack) {
            log.info("消息发送到broker成功！");
        } else {
            log.info("消息发送到broker失败，失败原因：{}", cause);
        }
    }
}
