O Tablestore SDK for Java usa um cliente dedicado para gerenciar túneis e iniciar o consumo de dados. Inicialize esse cliente com o nome da instância, o endpoint e as credenciais de acesso.
Pré-requisitos
Instale o Tablestore SDK for Java e configure as credenciais de acesso. O exemplo usa assinatura V4 e requer a versão 5.17.5 ou posterior.
Descrição do recurso
O TunnelClient é o cliente dedicado ao Tunnel Service. As operações de gerenciamento de túnel e os workers de consumo de dados usam este cliente para acessar o service. Reutilize uma instância do cliente no mesmo processo e chame shutdown após concluir todas as operações de túnel.
O construtor a seguir inicializa o TunnelClient:
public TunnelClient(
String endpoint,
CredentialsProvider credsProvider,
String instanceName,
ClientConfiguration config,
ResourceManager resourceManager
)
O exemplo abaixo usa a configuração padrão do cliente e um gerenciador de recursos exclusivo para inicializar o TunnelClient. Em seguida, envia uma solicitação listTunnel somente leitura para uma tabela existente e valida o endpoint, as credenciais de acesso e a conexão de rede. Antes de executar o exemplo, defina region, instanceName e endpoint com base nas informações da sua instância. Defina tableName como o nome de uma tabela de dados existente no modelo Wide Column para verificar a conectividade.
import com.alicloud.openservices.tablestore.TunnelClient;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.tunnel.ListTunnelRequest;
import com.alicloud.openservices.tablestore.model.tunnel.ListTunnelResponse;
public class InitTunnelClient {
public static void main(String[] args) {
String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
String region = "<region-id>";
String instanceName = "<instance-name>";
String endpoint = "<instance-endpoint>";
String tableName = "<table-name>";
TunnelClient tunnelClient = null;
try {
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
tunnelClient = new TunnelClient(
endpoint,
provider,
instanceName,
null,
null
);
ListTunnelResponse response = tunnelClient.listTunnel(new ListTunnelRequest(tableName));
System.out.println("TunnelClient initialized. Tunnels: " + response.getTunnelInfos().size());
System.out.println("RequestId: " + response.getRequestId());
} finally {
if (tunnelClient != null) {
tunnelClient.shutdown();
}
}
}
}
Parâmetros
Cliente
O construtor do TunnelClient tem os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
endpoint (obrigatório) |
String |
Endpoint da instância do Tablestore. Use um endpoint de rede pública, VPC ou clássica compatível com a rede do cliente. |
|
credsProvider (obrigatório) |
CredentialsProvider |
Provedor de credenciais. O exemplo usa um AccessKey ID, um AccessKey secret e o id da região da instância para criar credenciais V4. |
|
instanceName (obrigatório) |
String |
Nome da instância do Tablestore. |
|
config (opcional) |
ClientConfiguration |
Configuração do cliente. Se você definir este parâmetro como |
|
resourceManager (opcional) |
ResourceManager |
Gerenciador de recursos para conexões e threads do cliente. Se este parâmetro for definido como |
Configuração do cliente
O parâmetro config é do tipo ClientConfiguration. Use os métodos setXxx correspondentes para configurar as definições de conexão, tempo limite e nova tentativa. Se não forem necessárias configurações personalizadas, defina config como null. A tabela a seguir descreve as configurações comuns.
|
Nome |
Tipo |
Descrição |
|
maxConnections (opcional) |
int |
Número máximo de conexões HTTP abertas. Valor padrão: |
|
ioThreadCount (opcional) |
int |
Quantidade de threads de E/S para o cliente HTTP assíncrono. O valor padrão corresponde ao número de processadores disponíveis no runtime. |
|
connectionTimeoutInMillisecond (opcional) |
int |
Tempo limite para estabelecer uma conexão. Unidade: milissegundos. Valor padrão: |
|
socketTimeoutInMillisecond (opcional) |
int |
Tempo limite para transmitir dados em uma conexão estabelecida. Unidade: milissegundos. Valor padrão: |
|
connectionRequestTimeoutInMillisecond (opcional) |
int |
Tempo limite para obter uma conexão do pool de conexões. Unidade: milissegundos. Valor padrão: |
|
retryThreadCount (opcional) |
int |
Número de threads para novas tentativas em caso de erro. Valor padrão: |
|
retryStrategy (opcional) |
RetryStrategy |
Estratégia de nova tentativa para solicitações. Valor padrão: |
Outras configurações do cliente, como proxy, compactação, cache DNS, rastreamento de solicitações e sessões SSL, também são definidas pelos métodos correspondentes de ClientConfiguration.
Gerenciador de recursos
O parâmetro resourceManager é do tipo ResourceManager. Para um TunnelClient usado de forma independente, defina este parâmetro como null. O cliente cria um gerenciador de recursos com base em config e libera seus recursos ao chamar shutdown.
Para personalizar ou compartilhar recursos, use ResourceManager(ClientConfiguration configuration, ExecutorService callbackExecutor) para criar um ResourceManager proprietário. O construtor inclui os parâmetros listados abaixo.
|
Nome |
Tipo |
Descrição |
|
configuration (opcional) |
ClientConfiguration |
Configuração do cliente usada para criar conexões HTTP e threads de nova tentativa. Se este parâmetro for definido como |
|
callbackExecutor (opcional) |
ExecutorService |
Pool de threads responsável por executar callbacks assíncronos. Quando definido como |
Exemplos de cenários
Personalizar a configuração do cliente
Para ajustar as configurações padrão de conexão, tempo limite ou nova tentativa, importe ClientConfiguration no exemplo básico e substitua o código de inicialização do cliente pelo trecho a seguir:
ClientConfiguration config = new ClientConfiguration();
config.setMaxConnections(200);
config.setConnectionTimeoutInMillisecond(10000);
config.setSocketTimeoutInMillisecond(30000);
config.setRetryThreadCount(2);
tunnelClient = new TunnelClient(
endpoint,
provider,
instanceName,
config,
null
);
Compartilhar recursos do cliente
Se múltiplos clientes precisarem compartilhar conexões HTTP, threads de nova tentativa e threads de callback, crie um ResourceManager proprietário e passe a instância compartilhada retornada por sharedResourceManager() para cada cliente. Após fechar todos os clientes, encerre também o ResourceManager proprietário.
Não passe um ResourceManager proprietário diretamente para vários clientes. Caso contrário, quando qualquer cliente chamar shutdown, os recursos compartilhados serão liberados.
O código a seguir reutiliza as variáveis e o provedor de credenciais do exemplo básico. Importe ClientConfiguration e ResourceManager antes de executar o código.
ClientConfiguration config = new ClientConfiguration();
ResourceManager owner = new ResourceManager(config);
TunnelClient tunnelClientA = new TunnelClient(
endpoint, provider, instanceName, config, owner.sharedResourceManager());
TunnelClient tunnelClientB = new TunnelClient(
endpoint, provider, instanceName, config, owner.sharedResourceManager());
try {
tunnelClientA.listTunnel(new ListTunnelRequest(tableName));
tunnelClientB.listTunnel(new ListTunnelRequest(tableName));
} finally {
tunnelClientA.shutdown();
tunnelClientB.shutdown();
owner.shutdown();
}