当 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 路径。它不在此处展示的通道提供器范围内。

相关文章