From afab910780402433eaf16a3f88032250767f7989 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 6 Mar 2026 10:58:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=20DataChangeCallback=20=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20BadNoSubscription=20=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/connection.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/connection.rs b/src/connection.rs index c173d7b..8083d05 100644 --- a/src/connection.rs +++ b/src/connection.rs @@ -1074,6 +1074,21 @@ impl ConnectionManager { 0, true, opcua::client::DataChangeCallback::new(move |dv, item| { + // 检查是否有 BadNoSubscription 错误 + if let Some(status) = &dv.status { + if *status == opcua::types::StatusCode::BadNoSubscription { + tracing::warn!( + "Detected BadNoSubscription in data change callback for source {}, triggering reconnection", + current_source_id + ); + // 触发重连 + if let Some(tx) = manager.reconnect_tx.as_ref() { + let _ = tx.send(current_source_id); + } + return; + } + } + let client_handle = item.client_handle(); let val = dv.value; let timex = Some(Utc::now());