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 経路を調べてください。ここに示すチャネルプロバイダーの範囲外です。

関連記事