Javascript 通过同一连接访问多个gRPC服务(使用单个通道)
请注意,这不是的副本,因为它使用Javascript 通过同一连接访问多个gRPC服务(使用单个通道),javascript,microservices,grpc,grpc-node,Javascript,Microservices,Grpc,Grpc Node,请注意,这不是的副本,因为它使用grpc节点。出于某种原因,API中似乎存在差异 我执行创建我的APIPackageDefinitions和APIPackagepObjects的标准过程,并分别从每个客户端创建两个独立的客户端 让grpc=require('grpc')) 让protoLoader=require(“@grpc/protoLoader”) 异步函数createGrcpConnection(){ const HOST='localhost' 常量端口='50053' 常量端口2='
grpc节点
。出于某种原因,API中似乎存在差异
我执行创建我的APIPackageDefinitions和APIPackagepObjects的标准过程,并分别从每个客户端创建两个独立的客户端
让grpc=require('grpc'))
让protoLoader=require(“@grpc/protoLoader”)
异步函数createGrcpConnection(){
const HOST='localhost'
常量端口='50053'
常量端口2='50054'
让PhysicalProjectApipackeDefinition=等待protoLoader.load(
'./物理项目api.proto',protoLoaderOptions
)
让configAPIPackageDefinition=等待protoLoader.load(
'./config_api.proto',protoLoaderOptions
)
让PhysicalProjectApipackeObject=grpc.loadPackageDefinition(
PhysicalProjectAPPackageDefinition
).package.v1
让configAPIPackageObject=grpc.loadPackageDefinition(
configAPIPackageDefinition
).package.v1
设grpcClient1=physicalprojectappackageobject.PhysicalProjectAPI(
`${HOST}:${PORT}`,
grpc.credentials.createUnsecure()
)
让grpcClient2=configAPIPackageObject.ConfigAPI(
`${HOST}:${PORT2}`,
grpc.credentials.createUnsecure()
)
返回{GRPClient1,GRPClient2}
}
我正在寻找一种方法来创建共享同一连接的两个客户端。我认为通过创建一个新的频道
并将最后两个let
语句替换为
让cc=new grpc.Channel(
`${HOST}:${PORT}`,
grpc.credentials.createUnsecure()
)
设grpcClient1=physicalprojectapipackeobject.PhysicalProjectAPI(cc)
让grpcClient2=configapispackageobject.ConfigAPI(cc)
但是,我收到了一个类型错误:通道的第一个参数(地址)必须是字符串。我不知道如何合并新实例化的通道来为每个服务创建新的客户端。我在网上找不到任何有用的方法。任何帮助都将不胜感激
另外,目前我正在尝试使用两个服务,为每个服务创建一个客户端,并让这两个客户端在同一个通道上共享一个连接。是否可以使用两个服务,并为两个服务创建一个客户端?也许我可以在这里使用.proto包名称空间来发挥我的优势?在这个问题上,我的互联网搜索失败了。有一个API可以实现这一点,但它比您尝试的要难一点。实际上你不需要用它来得到你想要的。grpc库在内部池连接到同一服务器,只要这些连接是使用相同的参数创建的。因此,在第一个代码块中创建的客户机
对象实际上将使用相同的TCP连接
但是,正如前面提到的,有一种方法可以明确地做到这一点。客户端
构造函数的第三个参数是一个可选对象,具有各种附加选项,包括channelOverride
。它接受一个通道
对象,就像您在第二个代码块开始时构造的对象一样。您仍然必须为前两个参数传递有效值,但它们实际上将被忽略,而将使用第三个参数。您可以在中查看有关该构造函数参数的更多信息