小编ctr*_*ron的帖子

如何在客户端的 Eclipse Milo 中处理断开/重新连接?

我正在使用 Eclipse Milo 编写 OPC UA 客户端并偶然发现以下问题:客户端如何处理连接丢失。

对于监视值,我使用 SubscriptionManager 订阅来执行此操作:

OpcUaClient client = myCreateClient();
List<MonitoredItemCreateRequest> items = myCreateMonitoredItems();

UaSubscription subscription = client.getSubscriptionManager().createSubscription(1_000.0).get();
List<UaMonitoredItem> result = subscription.createMonitoredItems(TimestampsToReturn.Both, items).get();

for (UaMonitoredItem item : result) {
   if (!item.getStatusCode().isBad()) {
     item.setValueConsumer(value -> System.out.println("Update: " + value));
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我重新启动同样使用 Eclipse Milo 实现的 OPC UA 服务器时,我确实看到客户端重新连接,但订阅没有获得更多更新。在日志中,我得到以下输出:

09:11:15.734 [ua-shared-pool-0] DEBUG o.e.m.o.s.c.s.OpcUaSubscriptionManager - Publish service failure: StatusCode{name=Bad_NoSubscription, value=0x80790000, quality=bad}
java.util.concurrent.CompletionException: UaServiceFaultException: status=Bad_NoSubscription, message=There is no subscription available for this session.
    <stack-trace-omitted>
    …
Run Code Online (Sandbox Code Playgroud)

所以看起来 OpcUaSubscriptionManager 意识到了这种情况,但并没有尝试重新注册这些项目。这是要手动完成吗?

java opc-ua

7
推荐指数
1
解决办法
1600
查看次数

标签 统计

java ×1

opc-ua ×1