Spring-Boot MQTT配置

拉吉山·斯瓦米(Rajkishan Swami)

我需要将有效负载发送到许多名称是从数据库中选取的设备。然后,我必须发送不同的主题,就像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,并且可以配置(设置asynctrue)不等待确认,但后来公布确认为应用程序的事件。

如果您使用自己的代码并循环发送多个消息,则使用异步客户端可能会更快,并等待IMqttDeliveryToken稍后完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章