首页 > 解决方案 > 调用 Google 数据流 RestApi 时出现间歇性 401 未经身份验证的问题

问题描述

需要使用 Google Rest API 从流式数据流中以编程方式启动批处理数据流。为此,我们使用了 Java 实现。即使流式数据流收到消息,批处理数据流也会启动。这在一段时间内工作得很好,但有时我们会收到401-未经身份验证的错误。这是一个间歇性问题(就像有时 15-20 个批处理数据流启动,完成它的工作并消失。大约 30 分钟后,当它尝试再次启动批处理数据流时,它会引发 401 错误)即使我尝试刷新令牌在使用下面的代码片段获取默认令牌之前。

AccessToken access = ComputeEngineCredentials.getApplicationDefault().getAccessToken();
CloseableHttpClient client = HttpClientBuilder.create().useSystemProperties().build();

 HttpPost request =
    new HttpPost("https://dataflow.googleapis.com/v1b3/projects/dataflow-begining/templates:launch?gcsPath=gs://template/test.json");
 request.setHeader("Authorization", "Bearer "+access.getTokenValue());
 client.execute(request);

请帮助我了解我是否在这里做错了什么。或者建议是否有更好的方法。

注意:我们不能使用 serviceaccount 密钥来获取访问令牌,因为 .json 密钥不可用。而且我们没有要从我们的 java 程序发送的 clientId 或客户端密码。

任何帮助表示赞赏。

标签: google-cloud-platformgoogle-cloud-functionsgoogle-cloud-dataflow

解决方案


推荐阅读