QoS издателя: определяет гарантию доставки между издателем и брокером.
QoS подписчика: определяет гарантию доставки между брокером и подписчиком.
Я тестирую это с помощью Приложение Qt, в котором я запускаю два экземпляра — один в качестве издателя и один в качестве подписчика. Оба клиента используют cleanSession = false.
Вот мои тестовые сценарии:
QoS издателя = 2, QoS подписчика = 2
Я отключаю подписчика.
Публикую сообщение.
Подключите подписчика повторно.
QoS издателя = 0, QoS подписчика = 2
Я отключаю подписчика.
Опубликую несколько сообщений.
Подключите подписчика повторно.
Я ожидал, что подписчик по-прежнему будет получать сообщения, поскольку он подписался с QoS 2.
Я неправильно понимаю, как работает MQTT QoS?
Вот основная часть моего кода:
Код: Выделить всё
void MainWindow::on_subscribeBtn_clicked()
{
QString topic = ui->topicLineEdit->text().trimmed();
if (topic.isEmpty()) {
qDebug() qos2Radio);
// Subscribe to new topic
auto sub = client->subscribe(topic, qos);
if (!sub) {
qDebug() text();
if (topic.isEmpty()) {
qDebug() qos1RadioPub, ui->qos2RadioPub);
client->publish(topic, message.toUtf8(), pubQos, false);
qDebug()
Подробнее здесь: [url]https://stackoverflow.com/questions/79797570/mqtt-subscriber-doesn-t-receive-queued-messages-when-publisher-uses-qos-0[/url]
Мобильная версия