我想在我的 volttron 应用程序中使用 RPC 调用,但我无法进行任何调用。所有调用都失败,并显示“没有到主机的路由”错误
<stderr> ERROR: Unreachable: VIP error (113): No route to host: rpcserver.agent_1
Run Code Online (Sandbox Code Playgroud)
本质上有两个代理,一个是导出 RPC 过程的“服务器”代理,另一个是调用该过程的“客户端”代理。
在“服务器”代理中,我导出了一个代理类的方法,如下所示:
@RPC.export('setConfig')
def setConfig(self, config):
self.config = config
self.initialize_device()
Run Code Online (Sandbox Code Playgroud)
“客户端”代理调用导出的方法如下:
self.vip.rpc.call(sender, 'setConfig', self.config[sender]).get()
Run Code Online (Sandbox Code Playgroud)
其中“sender”是“server”代理的VIP身份(结果是“rpcserver.agent_1”,对应于从rpcserver.agent接收pubsub消息时“sender”参数的值。我已经定义了身份为 rpcserver.agent_{n} 在 IDENTITY 文件中)。
我的问题是: 1. 我是否在做一些明显错误的事情或遗漏了正确设置 RPC 子系统的某些步骤?2. “peer”参数是否self.vip.rpc.call(peer, method, ...)预期为代理的身份?这在文档中不清楚(我尝试了其他选项,例如代理名称或 uuid,但都没有奏效)
我在 Ubuntu VM 中运行 volttron 5.1.0。
对此的任何帮助将不胜感激。此致
细节:
这是用于互连多个设备的控制应用程序。代理根据网络中的可用设备动态加载。我想尝试使用 RPC 而不是仅使用 pubsub。我已经相当彻底地搜索了 Volttron 代码和文档,以获取有关 RPC API 的详细信息,但到目前为止都无济于事。
最小的“服务器”类:
class rpcServerAgent(Agent):
def __init__(self, config, **kwargs):
super(rpcServerAgent, self).__init__(**kwargs)
self.config = config
@Core.receiver('onstart')
def onstart(self, …Run Code Online (Sandbox Code Playgroud)