データベースから名前を選んだ多くのデバイスにペイロードを送信する必要があります。その後、別のトピックに送信する必要があります。settings/{put devicename here}
のようになります。Spring-Boot MQTT構成
私が使用していた設定は、私がスプリングブートのリファレンスドキュメントから得たものです。
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);
}
を使用して送信します。
私の質問は、パフォーマンスを向上させるために同じ出力チャンネルを使用することができますか?はいの場合は、どんな助けでも大歓迎です。ありがとうございました。
「MqttPahoMessageHandler」は、どのようなトピックにも送信できるように設定できますか?ここでは、私は1つのトピック 'messageHandler.setDefaultTopic(settings.getMqttPublishTopic());'にrestrctedされています。この制限を取り除き、 'void sendToMqtt(String topicName、String payload); 'のようなメソッドを持つことはできますか?私はメッセージを送るたびにトピック名を指定します。 – Raj
[ドキュメント](http://docs.spring.io/spring-integration/reference/html/mqtt.html#CO39-7)に記載されているとおり、これは__default__トピックです。メッセージが 'mqtt_topic'ヘッダー(定数' MqttHeaders.TOPIC')を含んでいない場合にのみ使用されます。ヘッダーを豊富にするなど、ヘッダーを追加することができます。ヘッダーを追加するには、 '@ Gateway'メソッドまたはゲートウェイメソッド自体の式を持つ' @ GatewayHeader'を使用します。 'void sendToMqtt(String payload、@Header(MqttHeaders .TOPIC)文字列トピック); '。 –
@GaryRussellは、sendToMqttで複数のトピックを使用することが可能です。 – Gkan