package com.ktg.common.utils.rocketmq;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.HashMap;
import java.util.Map;

/**
 * RocketMQ 配置属性类
 * 通过@ConfigurationProperties注解绑定application.yml中的配置
 */
@Data // Lombok注解，自动生成getter/setter等方法
@ConfigurationProperties(prefix = "rocketmq") // 指定配置前缀
public class RocketMQProperties {
    // NameServer地址，格式为 ip:port;ip:port
    private String namesrvAddr;

    // 生产者配置Map，key为生产者名称，value为生产者配置
    private Map<String, ProducerConfig> producers = new HashMap<>();

    // 消费者配置Map，key为消费者名称，value为消费者配置
    private Map<String, ConsumerConfig> consumers = new HashMap<>();

    /**
     * 生产者配置内部类
     */
    @Data
    public static class ProducerConfig {
        private String group; // 生产者组名
        private int retryTimesWhenSendFailed = 3; // 发送失败重试次数，默认3次
        private int sendMsgTimeout = 3000; // 发送消息超时时间，默认3000ms
        private int compressMsgBodyOverHowmuch = 1024 * 4; // 消息压缩阈值，默认4KB
        private String instanceName; // 生产者实例名称
    }

    /**
     * 消费者配置内部类
     */
    @Data
    public static class ConsumerConfig {
        private String group; // 消费者组名
        private String topic; // 订阅的Topic
        private String tags = "*"; // 订阅的Tag表达式，默认*表示所有
        private int consumeThreadMin = 5; // 最小消费线程数，默认5
        private int consumeThreadMax = 10; // 最大消费线程数，默认10
        private int consumeMessageBatchMaxSize = 1; // 批量消费大小，默认1
        private String instanceName; // 消费者实例名称
        private boolean enabled = true; // 是否启用，默认true
    }
}
