首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-Boot MQTT配置

Spring-Boot MQTT配置
EN

Stack Overflow用户
提问于 2016-12-16 13:58:16
回答 1查看 8K关注 0票数 1

我需要向许多设备发送有效负载,这些设备的名称都是从数据库中选择的。然后,我必须发送到不同的主题,这将是类似于settings/{put devicename here}

下面是我从spring启动参考文档中获得的配置。

MQTTConfiguration.java

代码语言:javascript
复制
@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);
}
}

在这里,我只发送一个主题。因此,我在下面添加了bean,以发送到多个主题;

代码语言:javascript
复制
@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;
}

我用它发送,

代码语言:javascript
复制
try {       
    mqttClient.publish(settings.getMqttPublishTopic()+device.getName(), mqttMessage);
    } catch (MqttException e) {
        LOGGER.error("Error While Sending Mqtt Messages", e);
    }

这很管用。

但是我的问题是,我能实现同样的目标,使用输出通道来获得更好的性能吗?如果是的话,任何帮助都是非常感谢的。谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-16 14:37:46

MqttClient是同步的。

MqttPahoMessageHandler使用MqttAsyncClient,可以配置(将async设置为true)以不等待确认,而是将确认发布为应用程序事件。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41186024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档