为 HTTP CONNECT 配置 Pub/Sub Java 的 gRPC 通道
通过 GAX 通道提供器安装 ProxyDetector,同时保持 Pub/Sub 的目标地址与 TLS 身份不变。
当 Pub/Sub Java gRPC 连接需要使用 HTTP CONNECT 代理时,请使用生成客户端的通道提供器。普通的 URLConnection 设置无法建立这种通道配置。
对于 topic-admin 客户端:
var channelProvider = TopicAdminSettings
.defaultGrpcTransportProviderBuilder()
.setChannelConfigurator(channel -> channel.proxyDetector(target ->
HttpConnectProxiedSocketAddress.newBuilder()
.setProxyAddress(new InetSocketAddress("proxy.example", 8080))
.setTargetAddress((InetSocketAddress) target)
.setUsername(proxyUser)
.setPassword(proxyPassword)
.build()))
.build();
var settings = TopicAdminSettings.newBuilder()
.setTransportChannelProvider(channelProvider)
.build();
try (TopicAdminClient client = TopicAdminClient.create(settings)) {
// Perform the application's intended topic-admin operation here.
}TopicAdminClient 和 TopicAdminSettings 是 Pub/Sub v1 的类;HttpConnectProxiedSocketAddress 来自 io.grpc,InetSocketAddress 来自 java.net。示例假定使用该通道通常采用的互联网地址目标。
探测器会在原始目标之外返回一个代理连接地址。gRPC 构建器要求代理地址已经解析。请让服务端点保持为 Pub/Sub:用代理主机名替换它会丢失服务目标和既定的 TLS 身份。
对于无需认证的代理,请删除用户名/密码调用;公开的 HTTP 候选可在 HTTP 代理列表中找到。这些调用属于 HTTP CONNECT 凭据接口,而不是 SOCKS 或通用的 NTLM 实现。
如果失败发生在 gRPC 操作之前,而独立创建的凭据仍能取得令牌,请检查该凭据的 HTTP 路径。它不在此处展示的通道提供器范围内。