MqttProtocolConfig.java 1.72 KB
Newer Older
xieshaojun's avatar
xieshaojun committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
package vc.thinker.mqtt.config;

import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Configuration;
import vc.thinker.absctacts.mqtt.connection.MqttCallbackImpl;
import vc.thinker.absctacts.mqtt.protocol.IMqttProtocol;

import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;

/**
 * Mqtt 协议配置
 *
 * @author HeTongHao
 * @since 2019-10-29 16:00
 */
@Slf4j
@Configuration
@ConditionalOnExpression("${mqtt.run:true}")
public class MqttProtocolConfig {
    /**
     * 需要注册的协议列表
     */
    private final List<IMqttProtocol> mqttProtocolList;
    /**
     * mqtt授权服务
     */
    private final Map<IMqttProtocol, MqttCallback> protocolCallbackMap = Maps.newHashMap();

    public MqttProtocolConfig(List<IMqttProtocol> mqttProtocolList) {
        this.mqttProtocolList = mqttProtocolList;
    }

    @PostConstruct
    private void initProtocol() {
        mqttProtocolList.forEach(mqttProtocol -> {
            Class<?> clazz = mqttProtocol.getClass();
            try {
                protocolCallbackMap.put(mqttProtocol, new MqttCallbackImpl(mqttProtocol.getProperties(), mqttProtocol));
                log.info("[{}]协议注册成功!", clazz.getSimpleName());
            } catch (MqttException e) {
                log.error("构建Mqtt回调组件失败,[{}]协议将不可用,errorMessage:{}", clazz.getSimpleName(), e.getMessage());
            }
        });
        log.info("注册协议总数:{}", protocolCallbackMap.size());
    }
}