You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Milo中启用DiscoveryServices实现以搭建LDS服务器?

基于Milo SDK搭建LDS服务器并替换自定义DiscoveryServiceSet

实现步骤

1. 替换默认DiscoveryService

Milo的OpcUaServer默认会注册DefaultDiscoveryService,要替换成你的自定义实现,需通过UaStackServer操作:

  • 先通过OpcUaServer.getStackServer()获取内部的UaStackServer实例。
  • 遍历已注册的服务集,移除类型为DiscoveryServiceSet的默认实现。
  • 调用UaStackServer.addServiceSet()添加你的自定义DiscoveryServiceSet实现。

示例代码:

// 初始化OpcUaServer实例
OpcUaServer server = ...;

// 获取UaStackServer
UaStackServer stackServer = server.getStackServer();

// 移除默认DiscoveryService
stackServer.getServiceSets().stream()
    .filter(s -> s instanceof DiscoveryServiceSet)
    .findFirst()
    .ifPresent(stackServer::removeServiceSet);

// 注入自定义实现(需传入sessionManager等必要依赖)
stackServer.addServiceSet(new YourCustomDiscoveryService(
    server.getSessionManager(),
    // 其他必要参数
));

2. 配置LDS核心参数

在构建OpcUaServerConfig时,需指定Discovery相关配置,确保服务器能作为LDS被发现:

OpcUaServerConfig config = new OpcUaServerConfigBuilder()
    // 设置LDS的访问地址
    .setDiscoveryUrls(Collections.singletonList("opc.tcp://localhost:4840"))
    // 配置端点、安全策略、证书等基础参数
    .setEndpoints(...)
    .setCertificate(...)
    .build();

3. 启动服务器

完成上述配置后,正常调用server.start()启动即可,此时你的自定义Discovery服务会替代默认实现,服务器以LDS身份提供服务。

关键注意事项

  • 自定义DiscoveryServiceSet时,需正确传入SessionManager(通过server.getSessionManager()获取),确保服务能正常处理会话相关逻辑。
  • 必须在服务器启动前完成服务替换操作,避免默认服务已初始化生效。
  • 若使用OpcUaServerBuilder,也可通过自定义ServiceSetFactory注册服务,但直接操作UaStackServer是更直接的方案。

内容的提问来源于stack exchange,提问作者CornCoder99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:09:19