连接 / 断开
connect()
public void connect();
建立到 endpoint 的连接. 内部串行执行:
- Hello — 协商 BufferSize / MaxMessageSize
- OpenSecureChannel — 协商加密通道 (None / Sign / SignAndEncrypt)
- GetEndpoints — 拉取服务端 Endpoint 列表 (用于校验)
- CreateSession — 创建会话, 协商 SessionTimeout
- ActivateSession — 用 UserToken 激活
- 加载 NamespaceArray 到
namespaces - 自动启
autoPublishOnConnect = true后台线程 - 自动启 KeepAlive 心跳
成功后:
isConnected() == truegetState() == SessionState.Connectedevents.onConnected监听者触发
失败抛 OpcUaException 携带具体 StatusCode (BadCertificateInvalid / BadIdentityTokenRejected / BadCommunicationError / ...).
例子
try (OpcUaSession ua = new OpcUaSession("opc.tcp://localhost:4840")) {
ua.events.onConnected.add(e ->
System.out.println("Connected to " + e.endpointUrl));
ua.events.onStateChanged.add(e ->
System.out.println(e.oldState + " → " + e.newState + " (reason=" + e.reason + ")"));
try {
ua.connect();
} catch (OpcUaException ex) {
System.err.println("Connect failed: " + ex.statusCode + " (" + ex.getMessage() + ")");
}
}
disconnect()
public void disconnect();
主动断开连接, 但保留 OpcUaSession 实例可重连. 内部:
- 停 KeepAlive
- 停 AutoPublish
- 关 Session (CloseSession + CloseSecureChannel)
- 触发
events.onDisconnected("主动断开")
close() 自动调用 disconnect(), 一般 try-with-resources 即可, 不需要显式 disconnect.
重连同一实例
try (OpcUaSession ua = new OpcUaSession("opc.tcp://server:4840")) {
ua.connect();
// ... 业务 ...
ua.disconnect();
// ... 等待 / 处理 ...
ua.connect(); // 同一实例可以多次 connect
// ...
}
自动重连 (内置)
构造时传 autoReconnect=true 启用. SDK 检测到底层通讯异常时自动:
Connected
↓ (异常)
Reconnecting (events.onReconnecting 触发)
↓ (重试 N 次)
├── 成功 → Reconnected (events.onReconnected 触发) → 自动 Republish 订阅
└── 失败 → Disconnected (events.onDisconnected 触发)
重连参数 (默认 3 次, 间隔 2 秒) 可通过环境变量调整:
| 环境变量 | 默认 | 说明 |
|---|---|---|
DARRA_OPCUA_RECONNECT_MAX | 3 | 最大重试次数 |
DARRA_OPCUA_RECONNECT_INTERVAL_MS | 2000 | 重试间隔 (毫秒) |
状态查询
Enums.SessionState s = ua.getState();
// Disconnected / Connecting / Connected / Reconnecting / Closing / Failed
boolean ok = ua.isConnected(); // == (getState() == Connected)
Enums.SessionState 枚举:
| 值 | 含义 |
|---|---|
Disconnected | 未连接 / 已断开 |
Connecting | 正在 connect (Hello / OpenSecureChannel) |
Connected | 已连接, 可正常 read / write / subscribe |
Reconnecting | 检测到断线, 自动重连中 |
Closing | 正在 disconnect / close |
Failed | 重连失败终态, 需要新建实例 |