Подписчик MQTT не получает сообщения в очереди, когда издатель использует QoS 0?C++

Программы на C++. Форум разработчиков
Anonymous
Подписчик MQTT не получает сообщения в очереди, когда издатель использует QoS 0?

Сообщение Anonymous »

Я читал документацию MQTT и, насколько я понимаю, существует два типа уровней качества обслуживания (QoS):
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]

Вернуться в «C++»