簡體   English   中英

Spring-Boot MQTT配置

[英]Spring-Boot MQTT Configuration

我需要將有效負載發送到許多從數據庫中選取名稱的設備。 然后,我必須發送不同的主題,就像settings/{put devicename here}

以下是我使用的配置,這些配置是我從spring-boot參考文檔中獲得的。

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);
}
}

在這里,我僅發送給1個主題。 所以我像下面這樣添加了bean,以發送到多個主題;

@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;
}

我發送使用,

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

哪個有效。

但是我的問題是, 我可以使用輸出通道獲得更好的性能嗎? 如果是,將不勝感激。 謝謝。

MqttClient是同步的。

MqttPahoMessageHandler使用MqttAsyncClient ,可以將其配置為(將async設置為true )不等待確認,而是稍后將確認作為應用程序事件發布。

如果您使用自己的代碼並循環發送多個消息,則使用異步客戶端可能會更快,並稍后等待IMqttDeliveryToken完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM