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();

Använd denna bigQuery-instans för REST-åtgärderna. projectId och credentials kommer från applikationens befintliga konfiguration.

Fabriken skapar den HTTP-transport som når BigQuery API via mellanledet. API-slutpunkten förblir målet; att ersätta den med proxyadressen begär en annan tjänst. För en tillåten offentlig proxyväg till BigQuery tillhandahåller HTTP-proxylistan kandidater för InetSocketAddress-fälten.

Hämtning eller förnyelse av autentiseringsuppgifter kan ha en egen HTTP-transport, så konfigurera den indata som stöds när dess förfrågningar behöver proxyn. Dessa REST-alternativ konfigurerar inte heller någon oberoende gRPC-kanal.

För systemupptäckt har java.net.useSystemProxies plattformsspecifikt beteende och garanterar inte att ett Docker HTTP_PROXY-värde blir denna klients väg. Den uttryckliga fabriken ovan gör den valda REST-transporten synlig redan vid byggandet.

Relaterade artiklar