服务格式为 <my-service:port> 时如何在客户端指定 gRPC 服务器地址目标

How to specify gRPC server address target on client side when the service is on format <my-service:port>

我们在 Java 应用程序服务上使用 grpc spring 引导启动程序,以便与另一个 'server' 服务建立连接,所以我在 application.properties 中定义以下地址:

grpc.client.name.address=static://service-name:port

尝试连接时,我收到以下错误消息:

StatusRuntimeException: UNAVAILABLE: io exception

所以我确定我遇到了连接问题。在 documentation 上,它表示关于静态方案:

A simple static list of IPs (both v4 and v6), that can be use connect to the server

所以我想这不是我需要使用的。在我看来最好的选择是使用 discovery 方案,但它不包含任何端口...

我需要使用什么方案配置来设置服务器地址?

gRPC 无法解析地址造成service-name:port;

如果使用static,则该值必须是ip:portservice-name需要解析为ip地址;

如果你正在使用像consul或eureka等注册中心,你应该使用discovery:///service-name而不指定端口。

如果你没有使用注册中心,只与服务器端到端,将service-name替换为属于服务器的IP,如127.0.0.1

或修改主机配置以解析 service-name,如下所示,Linux 上的文件是 /etc/hosts

127.0.0.1 service-name

想与那些将来会像我一样遇到同样问题的人分享这个非常烦人的问题的解决方案。

所以首先,方案确实需要设置 dns 类型,如下所示: grpc.client._name_.address=dns:///<service-name>:26502 但这还不够。 (至少在我的情况下)服务器配置为 运行 in PLAINTEXT,而我的客户端默认配置为 运行 with TLS 模式,因此它必须设置为 grpc.client.__name__.negotiationType=PLAINTEXT 属性.

请参阅以下内容documentation 了解更多信息