Весенняя аннотация для сообщения ручки, основанная на теме, пришла от брокера Mqtt - PullRequest
0 голосов
/ 06 июля 2019

Я создал весенний отдых, то есть клиент брокера MQTT. Я настраиваю, и это работает, но я хочу изменить код, чтобы его было легко читать и поддерживать. Это мой текущий код:

Слушатель:

public class MqttMessageListener implements MessageHandler {

private final List<MqttMessageHandler> mqttMessageHandlers;

public MqttMessageListener(List<MqttMessageHandler> mqttMessageHandlers) {
    this.mqttMessageHandlers = mqttMessageHandlers;
}

@Override
public void handleMessage(Message<?> message) {
    MqttMessageHandler handler = mqttMessageHandlers.stream()
            .filter(handleMessage -> handleMessage.canHandle(message))
            .findFirst()
            .orElseThrow(() -> new MqttMessageHandleException("Have no handler for this message in system"));
    handler.handleMessage(message);
}
}

Общий интерфейс обработчика:

public interface MqttMessageHandler {
void handleMessage(Message<?> message);
boolean canHandle(Message<?> message);
}

Абстрактный обработчик

public abstract class AbstractMqttMessageHandler implements MqttMessageHandler {
private DeviceModel deviceModel;

protected AbstractMqttMessageHandler(DeviceModel deviceModel) {
    this.deviceModel = deviceModel;
}

@Override
public boolean canHandle(Message<?> message) {
    return message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC).toString().contains(this.deviceModel.getModel());
}
}

Обработчик реализации

@Component
public class ShellyHTMessageHandler extends AbstractMqttMessageHandler {

protected ShellyHTMessageHandler() {
    super(DeviceModel.HT);
}

@Override
public void handleMessage(Message<?> message) {
    System.out.println("ShellyHTMessageHandler");
}
}

@Component
public class ShellySmokeMessageHandler extends AbstractMqttMessageHandler {

protected ShellySmokeMessageHandler() {
    super(DeviceModel.SMOKE);
}

@Override
public void handleMessage(Message<?> message) {
    System.out.println("ShellySmokeMessageHandler");
    System.out.println(message);
}
}

Код выше работает хорошо. Но я хочу изменить код на что-то вроде:

@Component
@MyAnnotation(topic="ShellyHT_regex")
public class ShellyHTMessageHandler {

public void handleMessage(Message<?> message) {
    System.out.println("ShellyHTMessageHandler");
}
}

есть предложения? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...