我希望使用grpc-node
客户端使用Go
框架与go-micro
内置的微服务进行通信。我遇到的问题是go-micro
使用句点(.
)定义方法名称以分隔名称空间和方法名称,而grpc-node
斜杠(/
)。是否有配置此模式以使这两个进程相互通信?
答案 0 :(得分:2)
gRPC over HTTP/2 protocol documentation定义路径构造如下:
路径→“:路径”“/”服务名称“/” {方法名称}
附加说明
某些gRPC实现可能允许覆盖上面显示的 Path 格式,但强烈建议不要使用此功能。 gRPC不会破坏使用这种覆盖的用户,但是我们不主动支持它,并且当路径不是上面显示的形式时,某些功能(例如,服务配置支持)将不起作用
因此,Node gRPC客户端遵循规范,go-micro使用的替代格式似乎在其代码生成插件(here)中进行了硬编码。我认为这是一个错误。
话虽如此,有一种可行的解决方法可以在Node gRPC库中匹配该方法名称格式。在节点中加载.proto
文件时,每个客户端构造函数都有一个service
成员,该成员是描述该服务的纯JavaScript对象。它是方法名称到方法定义的映射,每个方法定义都包含一个path
成员。您可以修改每个方法的路径以匹配go-micro使用的模式,然后将生成的服务对象传递给grpc.makeGenericClientConstructor
以获取连接到已修改服务的新客户端构造函数。