package com.fzm.mall.server.admin.mq;

import com.fzm.mall.server.admin.mq.enums.QueueTTLTypeEnum;
import com.fzm.mall.server.admin.mq.enums.QueueTypeEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author wangp
 * @date 2021/3/10 17:29
 * @description 消费者
 * @since JDK 1.8
 */
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MsgProducer {

    private final RabbitTemplate template;

    /**
     * 直接发送消息
     *
     * @param msg
     * @param msgType
     * @description
     * @author lgang
     * @create 2018年12月17日 下午3:52:24
     */
    public void send(String msg, QueueTypeEnum msgType) {
        template.convertAndSend(msgType.getExchange(), msgType.getQueueKey(), msg);
    }

    /**
     * 直接发送消息
     *
     * @param msg
     * @param msgType
     * @description
     * @author lgang
     * @create 2018年12月17日 下午3:52:24
     */
    public void send(Object msg, QueueTypeEnum msgType) {
        template.convertAndSend(msgType.getExchange(), msgType.getQueueKey(), msg);
    }

    /**
     * 发送延迟消息
     *
     * @param msg
     * @param msgType
     * @param delayTimes
     * @description
     * @author lgang
     * @create 2018年12月17日 下午3:52:35
     */
    public void sendTTL(String msg, QueueTTLTypeEnum msgType, long delayTimes) {
        template.convertAndSend(msgType.getExchange(), msgType.getQueueKey(), msg, message -> {
            message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
            return message;
        });
    }

    /**
     * 发送延迟消息
     *
     * @param msg
     * @param msgType
     * @param delayTimes
     * @description
     * @author lgang
     * @create 2018年12月17日 下午3:52:35
     */
    public void sendTTL(Object msg, QueueTTLTypeEnum msgType, long delayTimes) {
        template.convertAndSend(msgType.getExchange(), msgType.getQueueKey(), msg, message -> {
            message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
            return message;
        });
    }
}
