首页 > 解决方案 > UnknownHostException: eu-automl.googleapis.com 从 java 应用程序调用 automl API 时

问题描述

我试图通过 java 应用程序调用 API @ POST eu-automl.googleapis.com:443/v1beta1/projects/{project_id}/locations/eu/models/{model_id}:predict 并得到以下错误 -

**Caused by: java.net.UnknownHostException: eu-automl.googleapis.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$2.lookupAllHostAddr(Unknown Source)
    at java.net.InetAddress.getAddressesFromNameService(Unknown Source)
    at java.net.InetAddress.getAllByName0(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at java.net.InetAddress.getAllByName(Unknown Source)
    at io.grpc.internal.DnsNameResolver$JdkAddressResolver.resolveAddress(DnsNameResolver.java:646)
    at io.grpc.internal.DnsNameResolver.resolveAll(DnsNameResolver.java:404)**

当我通过邮递员运行这个 api 时,它会毫无错误地通过。调用此 API 的代码:

        **CredentialsProvider credentialsProvider =
                   FixedCredentialsProvider.create(
                     ServiceAccountCredentials.fromStream(
                             new FileInputStream(key)));
        PredictionServiceSettings settings =
                   PredictionServiceSettings.newBuilder()
                  .setCredentialsProvider(credentialsProvider)
                  .setEndpoint("eu-automl.googleapis.com:443")
                  .build();
        try (PredictionServiceClient client = PredictionServiceClient.create(settings)) {
            // Get the full path of the model.
            ModelName name = ModelName.of(projectId, "eu", modelId);
            URL url = TablesPredict.class.getResource("predict.json");
            InputStreamReader reader = new InputStreamReader(new FileInputStream(url.getPath()), "ASCII");
            ExamplePayload.Builder builder = ExamplePayload.newBuilder();
            JsonFormat.parser().merge(reader, builder);
            ExamplePayload payload = builder.build();
            PredictRequest request =
                    PredictRequest.newBuilder()
                    .setName(name.toString())
                    .setPayload(payload)                    
                    .putParams("feature_importance", "true")
                    .build();
            PredictResponse response = client. predict(request);
}**

知道我在这里缺少什么吗?

标签: google-cloud-platformgoogle-cloud-endpointsgoogle-cloud-automl

解决方案


我在您共享的 java 代码中没有看到任何奇怪的地方,因为您按照 GCPjava文档中的描述正确指定了 EU 端点。

你能检查一下你这边的防火墙配置是否有问题吗?您可以通过简单地 ping 端点来做到这一点eu-automl.googleapis.com


推荐阅读