Получение повторяющихся сохраненных сообщений при подписке на сохраненную тему.
Я использовал интеграцию Spring MQTT в своем проекте Iot.
Здесь, как только полученное сообщение получено, оно продолжает подписку до тех пор, пока я не опубликую пустое сообщение в той же теме с установленным флагом «true».
Я заметил, что когда я выполняю тот же процесс в терминале, используя команды mqtt, такие как подписка на сохраненную тему, он подписывается только один раз, повторная подписка не происходит.
Я использовал приведенный ниже код для подписки на все темы, используя #
@Bean
public MessageChannel mqttInputChannel() {
return new DirectChannel();
}
@Bean
public DefaultMqttPahoClientFactory clientfactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName("username");
options.setPassword("password".toCharArray());
options.setCleanSession(false);
//options.setCleanSession(true);
//options.setServerURIs(new String[] { "tcp://localhost" });
options.setServerURIs(new String[] { "url" });
factory.setConnectionOptions(options);
return factory;
}
@Bean
public MqttPahoMessageDrivenChannelAdapter inbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("admin",
clientfactory(), "#");
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
adapter.setOutputChannel(mqttInputChannel());
/*adapter.setc*/
return adapter;
}
@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler handler() {
return new MessageHandler() {
public void handleMessage(Message<?> message) throws MessagingException {
mqttSubscriptionProcessor.processSubscription(message);
}
};
}
Я опубликовал сохраненное сообщение с помощью этой команды
mosquitto_pub -u admin -P pwd -t hello/topic -m "test msg" -r -d
и результат в консоли eclipse равен
{mqtt_receivedRetained=true, id=48afaec5-debf-4927-ce06-a80556e479ac, mqtt_duplicate=false, mqtt_receivedTopic=hello/topic, mqtt_receivedQos=0, timestamp=1554363853214}
test msg
{mqtt_receivedRetained=true, id=48afaec5-debf-4927-ce06-a80556e479ac, mqtt_duplicate=false, mqtt_receivedTopic=hello/topic, mqtt_receivedQos=0, timestamp=1554363853214}
test msg
{mqtt_receivedRetained=true, id=48afaec5-debf-4927-ce06-a80556e479ac, mqtt_duplicate=false, mqtt_receivedTopic=hello/topic, mqtt_receivedQos=0, timestamp=1554363853214}
test msg
{mqtt_receivedRetained=true, id=48afaec5-debf-4927-ce06-a80556e479ac, mqtt_duplicate=false, mqtt_receivedTopic=hello/topic, mqtt_receivedQos=0, timestamp=1554363853214}
test msg
Здесь мне нужно подписаться на оставшуюся тему только один раз, нужно внести изменения в код интеграции Spring.