import java.net.InetSocketAddress;
import java.net.Proxy;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.cloud.http.HttpTransportOptions;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;

var proxy = new Proxy(Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example", 8080));
var httpOptions = HttpTransportOptions.newBuilder()
    .setHttpTransportFactory(() ->
        new NetHttpTransport.Builder().setProxy(proxy).build())
    .build();

BigQuery bigQuery = BigQueryOptions.newBuilder()
    .setProjectId(projectId)
    .setCredentials(credentials)
    .setTransportOptions(httpOptions)
    .build()
    .getService();

Bruk denne bigQuery-instansen for REST-operasjonene. projectId og credentials kommer fra applikasjonens eksisterende konfigurasjon.

Fabrikken lager HTTP-transporten som når BigQuery API gjennom mellomleddet. API-endepunktet forblir destinasjonen; å erstatte det med proxyadressen ber om en annen tjeneste. For en tillatt offentlig proxy-rute til BigQuery leverer HTTP-proxylisten kandidater for InetSocketAddress-feltene.

Innhenting eller fornyelse av legitimasjon kan ha sin egen HTTP-transport, så konfigurer den støttede inndataen når forespørslene trenger proxyen. Disse REST-alternativene konfigurerer heller ikke en uavhengig gRPC-kanal.

For systemoppdagelse har java.net.useSystemProxies plattformspesifikk atferd og garanterer ikke at en Docker HTTP_PROXY-verdi blir denne klientens rute. Den eksplisitte fabrikken ovenfor gjør den valgte REST-transporten synlig ved bygging.

Relaterte artikler