Я запускаю два экземпляра — один в качестве подписчика и один в качестве издателя.
В приложении пользователи могут щелкнуть правой кнопкой мыши по любой подписанной теме, чтобы отказаться от нее.
Я использую cleanSession = false для постоянных сеансов.
Сначала все работает нормально — когда я нажимаю правой кнопкой мыши на тему и отписываюсь, я перестаю получать новые сообщения по этой теме.
Однако после того, как я нажимаю кнопку «Отключиться», затем повторно подключаюсь и отписываюсь от темы, я все равно получаю сообщения, опубликованные по этой теме — даже если я от нее отписался.
В журнале показано:
Код: Выделить всё
qDebug() hostLineEdit->setText(");
ui->portLineEdit->setText("8883");
ui->userLineEdit->setText("XXX");
ui->passLineEdit->setText("XXX");
//Extra
clientId = QUuid::createUuid().toString(QUuid::Id128);
client->setClientId(clientId);
client->setCleanSession(false);
// Connect signals
connect(client, &QMqttClient::connected, this, &MainWindow::onConnected);
connect(client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
connect(client, &QMqttClient::stateChanged, this, &MainWindow::onStateChanged);
connect(client, &QMqttClient::errorChanged, this, &MainWindow::onErrorChanged);
ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->listWidget, &QListWidget::customContextMenuRequested,
this, &MainWindow::onSubscribedTopicsContextMenu);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onConnected()
{
qDebug() append(msg);
// Optional: also print to console
qDebug() text().trimmed();
QString pass = ui->passLineEdit->text();
if (!user.isEmpty()) {
client->setUsername(user);
}
if (!pass.isEmpty()) {
client->setPassword(pass);
}
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyPeer);
client->connectToHostEncrypted(sslConfig);
}
void MainWindow::on_disconnectBrokerBtn_clicked()
{
if (client->state() == QMqttClient::Connected) {
client->disconnectFromHost();
qDebug() state() == QMqttClient::Connecting) {
qDebug() disconnectFromHost();
}
else {
qDebug() topicLineEdit->text().trimmed();
if (topic.isEmpty()) {
qDebug() qos2Radio);
// Subscribe to new topic
auto sub = client->subscribe(topic, qos);
if (!sub) {
qDebug() mapToGlobal(pos));
if (selected == unsubscribeAction) {
QString topic = item->text();
client->unsubscribe(topic);
qDebug() takeItem(ui->listWidget->row(item));
}
}
void MainWindow::on_publishBtn_clicked()
{
QString topic = ui->pubTopicLineEdit->text().trimmed(); // same lineEdit as subscribe
QString message = ui->messageLineEdit->text();
if (topic.isEmpty()) {
qDebug() qos1RadioPub, ui->qos2RadioPub);
client->publish(topic, message.toUtf8(), pubQos, false);
qDebug()
Подробнее здесь: [url]https://stackoverflow.com/questions/79798491/unsubscribe-from-topic-not-working-when-using-persistent-session-mqtt[/url]
Мобильная версия