package org.springblade.common.notify.rocketmq.consumer;

import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * @author caiyihua
 */
@Slf4j
public abstract class MqMessageHandler {
    // 默认失败重试次数
    private static final int MAX_RETRY_TIMES = 3;

    /**
     * 处理订阅的消息
     *
     * @param messages
     * @return
     */
    public abstract boolean handle(List<MqMessage> messages);

    /**
     * 获取消费者ID
     *
     * @return
     */
    public abstract String getConsumerId();

    /**
     * 获取消息主题
     *
     * @return
     */
    public abstract String getTopic();

    /**
     * 获取消息标签
     *
     * @return
     */
    public abstract String getTag();

    /**
     * 是否广播订阅。注意，同一个CID下的handler返回值必须相同
     *
     * @return
     */
    public boolean isBroadcast() {
        return false;
    }

    /**
     * 消费消息失败后的最大重试次数
     *
     * @return
     */
    public int getMaxRetryTimes() {
        return MAX_RETRY_TIMES;
    }
}
