跳到主要内容

创建 Subscription

public OpcUaSubscription createSubscription(double publishingIntervalMs);
前置阅读 / 配套

参数

参数默认说明
publishingIntervalMs(无默认, 必填)服务端推送数据的最小间隔, 服务端可能 revise (调整)

例子

try (OpcUaSubscription sub = ua.createSubscription(500.0)) {
System.out.println("Subscription created with id=" + sub.getSubscriptionId());
System.out.println("Actual interval = " + sub.getPublishingIntervalMs() + "ms");
}

多订阅分流

如果一个应用既要 100 ms 高频订阅 (运动数据) 又要 5000 ms 低频订阅 (环境温度), 创建 2 个 Subscription 分流, 不要混在一个里:

try (OpcUaSubscription fast = ua.createSubscription(100);
OpcUaSubscription slow = ua.createSubscription(5000)) {
fast.add("ns=2;s=AxisPosition", null);
slow.add("ns=2;s=AmbientTemperature", null);
Thread.sleep(60_000);
}

每个 Subscription 都是独立的发布节奏, 互不影响.


OpcUaSubscription 公共属性

类别属性类型访问说明
标识getSubscriptionId()intR服务端视角的订阅 ID
handle()intRC 层句柄 (调试用)
getSession()OpcUaSessionR所属 Session
配置getPublishingIntervalMs()doubleR实际生效的发布间隔 (revised)
setPublishingEnabled(boolean)Enums.StatusCodeW启停整条订阅的发布
MonitoredItemssize()intR当前 MI 数量
getMonitoredNodeIds()List<String>R当前所有 MI 的 NodeId 快照

OpcUaSubscription 公共方法

方法说明
add(nodeId, Consumer)添加单 MI
add(nodeId, Consumer, AttributeId, samplingMs)添加单 MI (全参)
addMany(nodeIds, Consumer, AttributeId)批量添加
remove(int handle)移除单 MI
removeByNodeId(String nodeId)按 NodeId 移除全部对应 MI
modify(publishingMs, ...)改订阅参数
setMonitoringMode(mode, miHandles)批量切 mode
setMode(handle, mode)切单 MI mode
modifyMonitoredItems(requests)批量改采样
modifyItem(handle, samplingMs, queueSize, discardOldest)改单 MI
republish(seqNo)请求重发
pump(timeoutMs)手动 Publish
close()释放, 服务端 DeleteSubscription

事件 (Java 风格)

public final List<Consumer<DataChangeEventArgs>> onDataChanged;

详见 DataChanged 回调.

下一步