[英]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.