java – 如何在客户端Eclipse Milo中处理断开连接/重新连接?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何在客户端Eclipse Milo中处理断开连接/重新连接?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1655字,纯文字阅读大概需要3分钟。
内容图文
我正在使用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));
}
}
现在,当我重新启动我的OPC UA服务器(也使用Eclipse Milo实现)时,我确实看到客户端重新连接,但订阅不再获得更新.在日志中我得到以下输出:
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>
…
所以似乎OpcUaSubscriptionManager意识到了这种情况,但并没有尝试重新注册这些项目.这是手动完成的吗?
解决方法:
有一个流程图描述了客户端在OPC-UA第4部分第6.5节中应遵循的重新连接顺序.它涉及尝试重新使用相同的安全通道,尝试重新激活先前的会话,甚至尝试将订阅转移到新会话(如果失败). Milo客户端SDK完成所有这些工作.
重启服务器是最糟糕的情况,因为它抛弃了进程中的所有状态,这与正常的网络中断不同.在这种情况下,客户端SDK将通过回调通知它在重新连接后尝试恢复状态失败并且必须手动重新创建订阅.
将SubscriptionListener添加到UaSubscriptionManager,如果收到onSubscriptionTransferFailed回调,则可以重新创建订阅和监视项目.
内容总结
以上是互联网集市为您收集整理的java – 如何在客户端Eclipse Milo中处理断开连接/重新连接?全部内容,希望文章能够帮你解决java – 如何在客户端Eclipse Milo中处理断开连接/重新连接?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。