我的公司对使用独立的Service Fabric群集来管理与机器人的通信感兴趣。在我们的方案中,每个机械手将托管自己的rosbridge服务器,而我们的Service Fabric应用程序将维护每个机械手的WebSocket客户端。我设想了一个有状态的服务,沿着设备ID进行分区,它将在启动时打开连接。它应该通过心跳监视连接运行状况,将消息从机械手传递到某些协议网关服务,并侦听其他服务以将消息传递给机械手。
在Service Fabric文档中我没有看到有关这种外部通信方式的讨论-我无法确定这是因为:
我希望您能就此体系结构是否可行提供一些指导。如果没有,讨论为什么它不起作用将很有帮助。欢迎围绕Service Fabric服务与外部设备之间的双向通信限制进行一般性讨论。我希望如果我们可以继续讨论独立群集-我们目前没有计划使用Azure服务。
答案 0 :(得分:1)
我希望我没事。
关于障碍物:
我认为这里的主要问题是服务副本和机器人之间可以建立双向连接。
这有两个主要问题:
关于WebSockets
这似乎可以通过使用WebSockets实现自定义ICommunicationListener和other things来实现。
答案 1 :(得分:1)
您希望SF托管客户端的任何特殊原因,而不是相反的方式吗?
按照您的建议,我认为您将面临巨大的挑战,要让SF在您的网络上找到这些设备并对其进行跟踪,例如,防火墙,IP,NAT,计划内的维护,故障,连接问题,除非您正在计划手动完成。
从我在您提供的有关rosbridge服务器的文档中看到的简短描述中,我可以理解,您必须将其托管在服务器上(就像使用服务结构服务那样),并且您的设备将连接到该服务器。在这种情况下,您的设备将安装ROS进行通信。
关于您对通信的担忧,服务结构服务只是您通常在本地计算机上运行的可执行程序,如果可以正常运行,则可能会在前提条件下在服务结构环境中工作,您唯一需要担心的是外部访问群集(如果是天蓝色或网络配置)和服务发现。
在我看来,您应该使用SF作为通信的中心点,并且每个设备都将连接到SF服务。 另一种方法是使用Azure IoT Hub桥接两者之间的通信。有一个不错的Iot Hub + Service Fabric Sample可能适合您的需求。
由于要避免使用Azure,在这种情况下,可以用另一个消息传递平台替换IoT中心,或在服务中实现罗斯桥来处理呼叫。