Google Cloud Platform 服务的 Java 惯用客户端。
GitHub 和 Maven Central 上提供了用于开发与各个 Google Cloud 服务交互的 Java 应用程序的库:
客户 | 发布级别 | 版本 |
---|---|---|
AI平台笔记本 | ||
API网关 | ||
API 密钥 API | ||
准入审批 | ||
咨询通知 API | ||
合金数据库 | ||
AlloyDB 连接器 | ||
分析中心 API | ||
Apigee 连接 | ||
App Engine 管理 API | ||
工件登记处 | ||
资产盘点 | ||
政府工作量有保障 | ||
自动机器学习 | ||
备份容灾服务API | ||
大查询 | ||
BigQuery 连接 | ||
BigQuery 数据传输服务 | ||
BigQuery 预订 | ||
BigQuery 存储 | ||
大表 | ||
Bigtable Hbase 客户端 | ||
计费 | ||
计费预算 | ||
二进制授权 | ||
建造 | ||
CCAI 见解 | ||
证书颁发机构服务 | ||
渠道服务 | ||
作曲家 | ||
计算引擎 | ||
连接网关API | ||
容器分析 | ||
控制合作伙伴API | ||
域名系统 | ||
数据目录 | ||
数据融合 | ||
数据沿袭 | ||
数据丢失防护 | ||
数据库迁移服务 | ||
数据中心 | ||
数据处理程序 | ||
Dataproc 元存储 | ||
数据存储 | ||
数据流 | ||
调试器 | ||
部署 | ||
对话流API | ||
发现引擎API | ||
分布式边缘 | ||
分布式边缘网络API | ||
文档人工智能 | ||
域名 | ||
基本联系人 API | ||
事件弧 | ||
文件存储API | ||
火库 | ||
车队路线 | ||
功能 | ||
GKE 中心 API | ||
我是 | ||
IAM 管理 API | ||
IAM 策略疑难解答 API | ||
IAM 服务账户凭证 API | ||
身份访问上下文管理器 | ||
身份识别代理 API | ||
基础设施管理器API | ||
物联网 (IoT) 核心 | ||
入侵检测系统 | ||
密钥管理服务 | ||
Kubernetes 引擎 | ||
记录 | ||
Microsoft Active Directory 托管服务 | ||
内存缓存 | ||
监控仪表板 | ||
自然语言 | ||
网络连接中心 | ||
网络管理API | ||
网络安全API | ||
操作系统配置API | ||
操作系统登录 | ||
组织政策 | ||
分析器 | ||
发布/订阅 | ||
Pub/Sub 组 Kafka 连接器 | ||
发布/订阅精简版 | ||
Pub/Sub Lite Kafka Shim | ||
Pub/Sub Lite Spark 连接器 | ||
公共证书颁发机构 API | ||
配额API | ||
推荐人 | ||
雷迪斯 | ||
资源管理器API | ||
资源设置API | ||
零售 | ||
路线API | ||
调度程序 | ||
秘密管理 | ||
安全源管理器 API | ||
安全中心管理API | ||
安全指挥中心 | ||
安全态势API | ||
安全扫描仪 | ||
无服务器 VPC 访问 | ||
服务控制API | ||
服务目录 | ||
服务管理API | ||
服务使用情况 | ||
壳 | ||
扳手 | ||
扳手 JDBC | ||
演讲 | ||
Stackdriver 监控 | ||
Stackdriver 跟踪 | ||
贮存 | ||
存储传输服务 | ||
热塑性聚氨酯 | ||
人才解决方案 | ||
任务 | ||
电信自动化 API | ||
文字转语音 | ||
翻译 | ||
虚拟机迁移 | ||
顶点人工智能 | ||
顶点人工智能API | ||
视频智能 | ||
视频拼接器 API | ||
视频转码器 | ||
想象 | ||
网络风险 | ||
工作流程执行 | ||
工作流程 | ||
工作区附加 API | ||
工作站 | ||
reCAPTCHA 企业版 | ||
API 中心 API | ||
广告管理器 API | ||
地址验证 API | ||
分析管理员 | ||
分析数据 | ||
分析中心 | ||
Anthos 多云 | ||
Apache Kafka API 托管服务 | ||
应用程序中心API | ||
120桌区 | ||
GKE 备份 | ||
裸机解决方案 | ||
批 | ||
BeyondCorp 应用程序连接 | ||
BeyondCorp 应用程序连接器 | ||
BeyondCorp 应用程序网关 | ||
BeyondCorp 客户端连接器服务 | ||
BeyondCorp 客户端网关 | ||
大湖 | ||
BigQuery 数据策略 API | ||
BigQuery 迁移 | ||
CSS API | ||
证书管理器 | ||
聊天API | ||
商业消费者采购 | ||
机密计算API | ||
连接网关API | ||
数据标签 | ||
数据流 | ||
数据表 | ||
开发者连接 API | ||
Dialogflow CX | ||
文档AI仓库 | ||
企业知识图谱 | ||
错误报告 | ||
事件弧出版 | ||
GDC 硬件管理 API | ||
KMS库存API | ||
生命科学 | ||
直播API | ||
记录 Logback Appender | ||
记录 Servlet 初始化程序 | ||
地图平台数据集 API | ||
营销平台管理API | ||
媒体翻译API | ||
满足API | ||
用于 Redis API 的内存存储 | ||
商户API | ||
商户API | ||
商户API | ||
商户API | ||
商户API | ||
商户API | ||
商家转化API | ||
商户LFP API | ||
商户通知API | ||
商户配额API | ||
迁移中心API | ||
监控指标范围 | ||
用于存储的 NIO 文件系统提供程序 | ||
网络应用程序接口 | ||
网络服务API | ||
Oracle数据库@API | ||
并行存储API | ||
网络钓鱼防护 | ||
地点 API(新) | ||
地点见解 API | ||
政策模拟器API | ||
私人目录 | ||
特权访问管理器 API | ||
Pub/Sub Lite Flink 连接器 | ||
快速迁移评估 API | ||
推荐人工智能 | ||
注册表API | ||
路线优化API | ||
跑步 | ||
安全指挥中心设置 API | ||
服务健康API | ||
太阳能API | ||
存储洞察 API | ||
支持API | ||
VMware引擎 | ||
视觉人工智能API | ||
工作区事件 API |
如果未列出该服务,google-api-java-client 将使用旧版 REST 接口与其他 Google Cloud API 进行交互。
构建 Java 应用程序时,应优先考虑表中列出的库。
大多数google-cloud
库都需要项目 ID。有多种方法可以指定此项目 ID。
google-cloud
库时,无需指定项目 ID。它是从生产环境自动推断的。google-cloud
时,您可以执行以下操作之一:构建服务选项时提供项目 ID。例如,要使用 ID 为“PROJECT_ID”的项目中的数据存储,您可以编写:
Datastore datastore = DatastoreOptions . newBuilder (). setProjectId ( "PROJECT_ID" ). build (). getService ();
将环境变量GOOGLE_CLOUD_PROJECT
指定为您所需的项目 ID。
使用 Google Cloud SDK 设置项目 ID。要使用 SDK,请下载 SDK(如果尚未下载),然后从命令行设置项目 ID。例如:
gcloud config set project PROJECT_ID
google-cloud
按列出的顺序从以下来源确定项目 ID,一旦找到值就停止:
GOOGLE_CLOUD_PROJECT
指定的项目 IDGOOGLE_APPLICATION_CREDENTIALS
环境变量指向的 JSON 凭据文件中指定的项目 ID如果库可能明确需要项目 ID,我们提供一个可以提供推断的项目 ID 的帮助程序:
import com . google . cloud . ServiceOptions ;
...
String projectId = ServiceOptions . getDefaultProjectId ();
google-cloud-java
使用 https://github.com/googleapis/google-auth-library-java 来验证请求。 google-auth-library-java
支持多种身份验证类型;有关更多详细信息,请参阅项目的 README 和 javadoc。
从 Google Cloud Platform 环境(例如 Compute Engine、Kubernetes Engine 或 App Engine)使用 Google Cloud 库时,无需执行额外的身份验证步骤。
例如:
Storage storage = StorageOptions . getDefaultInstance (). getService ();
或者:
CloudTasksClient cloudTasksClient = CloudTasksClient . create ();
生成 JSON 服务帐户密钥。
下载该密钥后,您必须执行以下操作之一:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json
Storage storage = StorageOptions . newBuilder ()
. setCredentials ( ServiceAccountCredentials . fromStream ( new FileInputStream ( "/path/to/my/key.json" )))
. build ()
. getService ();
如果在本地运行以进行开发/测试,您可以使用 Google Cloud SDK。使用gcloud auth application-default login
创建应用程序默认凭据,然后google-cloud
将自动检测此类凭据。
如果您已经拥有 OAuth2 访问令牌,则可以使用它进行身份验证(请注意,在这种情况下,访问令牌不会自动刷新):
Credentials credentials = GoogleCredentials . create ( new AccessToken ( accessToken , expirationTime ));
Storage storage = StorageOptions . newBuilder ()
. setCredentials ( credentials )
. build ()
. getService ();
或者:
Credentials credentials = GoogleCredentials . create ( new AccessToken ( accessToken , expirationTime ));
CloudTasksSettings cloudTasksSettings = CloudTasksSettings . newBuilder ()
. setCredentialProvider ( FixedCredentialsProvider . create ( credentials ))
. build ();
CloudTasksClient cloudTasksClient = CloudTasksClient . create ( cloudTasksSettings );
如果未提供凭据, google-cloud
将尝试使用GoogleCredentials.getApplicationDefault()
从环境中检测它们,这将在以下位置(按顺序)搜索应用程序默认凭据:
GOOGLE_APPLICATION_CREDENTIALS
环境变量指向的凭据文件gcloud auth application-default login
命令提供的凭据少数 Google Cloud API 支持使用 API 密钥进行身份验证。
我们正在积极探索改善 API Key 体验的方法。目前,要将 API Key 与 Java 客户端库一起使用,您需要手动设置相关服务客户端的标头。
例如,要使用语言服务设置 API 密钥:
public LanguageServiceClient createGrpcClientWithApiKey ( String apiKey ) throws Exception {
// Manually set the api key via the header
Map < String , String > header = new HashMap < String , String >() { { put ( "x-goog-api-key" , apiKey );}};
FixedHeaderProvider headerProvider = FixedHeaderProvider . create ( header );
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingGrpcChannelProvider . newBuilder (). setHeaderProvider ( headerProvider ). build ();
LanguageServiceSettings settings = LanguageServiceSettings . newBuilder (). setTransportChannelProvider ( transportChannelProvider ). build ();
LanguageServiceClient client = LanguageServiceClient . create ( settings );
return client ;
}
使用 REST 的语言客户端实例化示例:
public LanguageServiceClient createRestClientWithApiKey ( String apiKey ) throws Exception {
// Manually set the api key header
Map < String , String > header = new HashMap < String , String >() { { put ( "x-goog-api-key" , apiKey );}};
FixedHeaderProvider headerProvider = FixedHeaderProvider . create ( header );
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider . newBuilder (). setHeaderProvider ( headerProvider ). build ();
LanguageServiceSettings settings = LanguageServiceSettings . newBuilder (). setTransportChannelProvider ( transportChannelProvider ). build ();
LanguageServiceClient client = LanguageServiceClient . create ( settings );
return client ;
}
要获取帮助,请按照故障排除文档中的说明进行操作。
Google Cloud 客户端库在与服务的底层通信中使用 HTTPS 和 gRPC。在这两种协议中,您可以使用https.proxyHost
和(可选) https.proxyPort
属性配置代理。
对于使用 gRPC 的更自定义代理,您需要向ManagedChannelBuilder
提供ProxyDetector
:
import com . google . api . core . ApiFunction ;
import com . google . api . gax . rpc . TransportChannelProvider ;
import com . google . cloud . tasks . v2 . CloudTasksClient ;
import com . google . cloud . tasks . v2 . CloudTasksSettings ;
import com . google . cloud . tasks . v2 . stub . CloudTasksStubSettings ;
import io . grpc . HttpConnectProxiedSocketAddress ;
import io . grpc . ManagedChannelBuilder ;
import io . grpc . ProxiedSocketAddress ;
import io . grpc . ProxyDetector ;
import javax . annotation . Nullable ;
import java . io . IOException ;
import java . net . InetSocketAddress ;
import java . net . SocketAddress ;
public CloudTasksClient getService () throws IOException {
TransportChannelProvider transportChannelProvider =
CloudTasksStubSettings . defaultGrpcTransportProviderBuilder ()
. setChannelConfigurator (
new ApiFunction < ManagedChannelBuilder , ManagedChannelBuilder >() {
@ Override
public ManagedChannelBuilder apply ( ManagedChannelBuilder managedChannelBuilder ) {
return managedChannelBuilder . proxyDetector (
new ProxyDetector () {
@ Nullable
@ Override
public ProxiedSocketAddress proxyFor ( SocketAddress socketAddress )
throws IOException {
return HttpConnectProxiedSocketAddress . newBuilder ()
. setUsername ( PROXY_USERNAME )
. setPassword ( PROXY_PASSWORD )
. setProxyAddress ( new InetSocketAddress ( PROXY_HOST , PROXY_PORT ))
. setTargetAddress (( InetSocketAddress ) socketAddress )
. build ();
}
});
}
})
. build ();
CloudTasksSettings cloudTasksSettings =
CloudTasksSettings . newBuilder ()
. setTransportChannelProvider ( transportChannelProvider )
. build ();
return CloudTasksClient . create ( cloudTasksSettings );
}
长时间运行操作 (LRO) 通常用于预计需要很长时间才能完成的 API 调用(即配置 GCE 实例或数据流管道)。初始 API 调用在服务器上创建一个“操作”并返回一个操作 ID 以跟踪其进度。 LRO RPC 在调用名称后附加了后缀Async
(即clusterControllerClient.createClusterAsync()
)
我们生成的客户端提供了一个很好的界面来启动操作然后等待操作完成。这是通过返回一个OperationFuture
来完成的。当在OperationFuture
上调用get()
时,客户端库将轮询操作以检查操作的状态。
例如,以 google-cloud-dataproc v4.20.0 中的createCluster
操作为例:
try ( ClusterControllerClient clusterControllerClient = ClusterControllerClient . create ()) {
CreateClusterRequest request =
CreateClusterRequest . newBuilder ()
. setProjectId ( "{PROJECT_ID}" )
. setRegion ( "{REGION}" )
. setCluster ( Cluster . newBuilder (). build ())
. setRequestId ( "{REQUEST_ID}" )
. setActionOnFailedPrimaryWorkers ( FailureAction . forNumber ( 0 ))
. build ();
OperationFuture < Cluster , ClusterOperationMetadata > future =
clusterControllerClient . createClusterOperationCallable (). futureCall ( request );
// Do something.
Cluster response = future . get ();
} catch ( CancellationException e ) {
// Exceeded the default RPC timeout without the Operation completing.
// Library is no longer polling for the Operation status. Consider
// increasing the timeout.
}
轮询操作具有默认超时,该超时因服务而异。该库将抛出java.util.concurrent.CancellationException
并显示消息: Task was cancelled.
如果超时超过操作。 CancellationException
并不意味着后端 GCP 操作已取消。当超过总超时而未从操作接收到成功状态时,客户端库会抛出此异常。我们的客户端库尊重每个 RPC 在 OperationTimedPollAlgorithm 中设置的配置值。
注意:客户端库为您处理操作的轮询机制。默认情况下,不需要自己手动轮询状态。
每个 LRO RPC 都有一组预先配置的默认值。您可以通过在每个 Client 的StubSettings
类中搜索来找到这些值。默认的 LRO 设置是在嵌套 Builder 类的initDefaults()
方法内初始化的。
例如,在 google-cloud-aiplatform v3.24.0 中,默认的 OperationTimedPollAlgorithm 具有以下默认值:
OperationTimedPollAlgorithm . create (
RetrySettings . newBuilder ()
. setInitialRetryDelay ( Duration . ofMillis ( 5000L ))
. setRetryDelayMultiplier ( 1.5 )
. setMaxRetryDelay ( Duration . ofMillis ( 45000L ))
. setInitialRpcTimeout ( Duration . ZERO )
. setRpcTimeoutMultiplier ( 1.0 )
. setMaxRpcTimeout ( Duration . ZERO )
. setTotalTimeout ( Duration . ofMillis ( 300000L ))
. build ())
重试和 LRO 共享相同的 RetrySettings 类。请注意相应的链接:
RPC 超时值在 LRO 中没有用处,可以省略或设置为默认值(超时为Duration.ZERO
,或乘数为1.0
)。
要配置 LRO 值,请创建一个 OperationTimedPollAlgorithm 对象并更新 RPC 的轮询算法。例如:
ClusterControllerSettings . Builder settingsBuilder = ClusterControllerSettings . newBuilder ();
TimedRetryAlgorithm timedRetryAlgorithm = OperationTimedPollAlgorithm . create (
RetrySettings . newBuilder ()
. setInitialRetryDelay ( Duration . ofMillis ( 500L ))
. setRetryDelayMultiplier ( 1.5 )
. setMaxRetryDelay ( Duration . ofMillis ( 5000L ))
. setInitialRpcTimeout ( Duration . ZERO ) // ignored
. setRpcTimeoutMultiplier ( 1.0 ) // ignored
. setMaxRpcTimeout ( Duration . ZERO ) // ignored
. setTotalTimeout ( Duration . ofHours ( 24L )) // set polling timeout to 24 hours
. build ());
settingsBuilder . createClusterOperationSettings ()
. setPollingAlgorithm ( timedRetryAlgorithm );
ClusterControllerClient clusterControllerClient = ClusterControllerClient . create ( settingsBuilder . build ());
注意:上面的配置仅修改createClusterOperation
RPC 的 LRO 值。客户端中的其他 RPC 仍将使用每个 RPC 的预配置 LRO 值。
如果您使用多个 Google Cloud 客户端库,我们建议您使用我们的物料清单 (BOM) 工件之一来帮助管理依赖项版本。有关更多信息,请参阅使用云客户端库。
使用此存储库中的客户端需要 Java 8 或更高版本。
此存储库中的客户端使用 HTTP 或 gRPC 作为传输层。所有基于 HTTP 的客户端都应该在所有环境中工作。
对于使用 gRPC 的客户端,支持的平台受到 Forked Tomcat Native 支持的平台的限制,对于架构来说仅意味着 x86_64,对于操作系统来说意味着 Mac OS X、Windows 和 Linux。此外,gRPC 还限制了具有线程限制的平台的使用。
因此,不支持以下内容:
以下环境应该可以工作(除其他外):
该库提供了一些工具来帮助为使用谷歌云服务的代码编写测试。
请参阅测试以了解有关使用我们的测试助手的更多信息。
该库遵循语义版本控制,并具有一些附加资格:
标有@BetaApi
或@Experimental
的组件被视为“1.x”库中的“0.x”功能。这意味着它们可以以不兼容的方式在次要版本和补丁版本之间进行更改。这些功能不应被任何本身具有使用者的库“B”使用,除非使用@BetaApi
功能的库 B 的组件也标记有@BetaApi
。标记为@BetaApi
功能最终将成为“1.x”功能,并删除标记。
google-cloud-java 的特殊例外:允许 google-cloud-java 依赖于 gax-java 中的@BetaApi
功能,而无需声明使用代码@BetaApi
,因为 gax-java 和 google-cloud-java 彼此同步移动。因此,gax-java 不应独立于 google-cloud-java 使用。
用@InternalApi
标记的组件在技术上是公共的,但这只是因为 Java 访问修饰符的限制。就 semver 而言,它们应被视为私有的。
用@InternalExtensionOnly
标记的接口是公共的,但只能由内部类实现。出于 semver 的目的,我们保留在没有默认实现的情况下添加到这些接口的权利(对于 Java 7)。
请注意,这些客户端目前正在积极开发中。任何版本 0.xy 都可能随时发生向后不兼容的更改。
以稳定质量级别定义的库预计是稳定的,并且库中的所有更新都保证向后兼容。任何向后不兼容的更改都将导致主要版本增量(1.xy -> 2.0.0)。
在预览质量级别定义的库仍在进行中,并且更有可能获得向后不兼容的更新。此外,预览版库在升级到预览版或稳定版之前可能会被弃用和删除。
如果您使用 IntelliJ 或 Eclipse,您可以使用这些 IDE 插件将客户端库添加到您的项目中:
除了添加客户端库之外,插件还提供其他功能,例如服务帐户密钥管理。有关更多详细信息,请参阅每个插件的文档。
这些客户端库可用于 Java 8 运行时的 App Engine 标准和灵活的 App Engine(包括 Compat 运行时)。大多数库不适用于 Java 7 运行时的 App Engine 标准。但是,数据存储、存储和 Bigquery 应该可以工作。
我们始终欢迎并强烈鼓励对该库做出贡献。
有关如何开始的更多信息,请参阅google-cloud
的贡献文档和共享文档。
请注意,该项目是随贡献者行为准则一起发布的。参与该项目即表示您同意遵守其条款。请参阅行为准则了解更多信息。
Apache 2.0 - 请参阅许可证以获取更多信息。