有没有办法为grpc-node client配置生成方法名称?

时间:2018-03-15 20:19:13

标签: node.js microservices grpc

我希望使用grpc-node客户端使用Go框架与go-micro内置的微服务进行通信。我遇到的问题是go-micro使用句点(.)定义方法名称以分隔名称空间和方法名称,而grpc-node斜杠(/)。是否有配置此模式以使这两个进程相互通信?

1 个答案:

答案 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以获取连接到已修改服务的新客户端构造函数。