Spring-Boot-MQTT-Konfiguration

Habe ich eine Anforderung zu senden, die Nutzlast auf eine Menge von Geräten, deren Namen ausgewählt sind aus der Datenbank. Dann habe ich auf senden zu verschiedenen Themen, die wie settings/{put devicename here}.

Unten ist die Konfiguration, die ich war, mit dem ich von Frühling-boot-Referenz-Dokumente.

MQTTConfiguration.java

@Configuration
@IntegrationComponentScan
public class MQTTConfiguration {

@Autowired
private Settings settings;
@Autowired
private DevMqttMessageListener messageListener;

@Bean
MqttPahoClientFactory mqttClientFactory() {
    DefaultMqttPahoClientFactory clientFactory = new DefaultMqttPahoClientFactory();
    clientFactory.setServerURIs(settings.getMqttBrokerUrl());
    clientFactory.setUserName(settings.getMqttBrokerUser());
    clientFactory.setPassword(settings.getMqttBrokerPassword());
    return clientFactory;
}

@Bean
MessageChannel mqttOutboundChannel() {
    return new DirectChannel();
}

@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
    MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler("dev-client-outbound",
            mqttClientFactory());
    messageHandler.setAsync(true);
    messageHandler.setDefaultTopic(settings.getMqttPublishTopic());
    return messageHandler;
}

@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface DeviceGateway {
    void sendToMqtt(String payload);
}
}

Hier bin ich senden um nur 1 Thema. Also ich habe die Bohne wie unten zu schicken, um mehrere Themen;

@Bean
public MqttClient mqttClient() throws MqttException {
    MqttClient mqttClient = new MqttClient(settings.getMqttBrokerUrl(), "dev-client-outbound");
    MqttConnectOptions connOptions = new MqttConnectOptions();
    connOptions.setUserName(settings.getMqttBrokerUser());
    connOptions.setPassword(settings.getMqttBrokerPassword().toCharArray());
    mqttClient.connect(connOptions);
    return mqttClient;
}

und ich senden mit

try {       
    mqttClient.publish(settings.getMqttPublishTopic()+device.getName(), mqttMessage);
    } catch (MqttException e) {
        LOGGER.error("Error While Sending Mqtt Messages", e);
    }

Die funktioniert.

Aber meine Frage ist, Kann ich das gleiche zu erreichen, Sie output-channel für bessere Leistung? Wenn ja, jede Hilfe ist sehr geschätzt. Danke.

Schreibe einen Kommentar