O cliente de Tunnel é um framework de consumo automático de dados do Tunnel Service. Antes de usar o Tunnel Service, conheça os seguintes recursos dos clientes de Tunnel: processamento automático de dados, balanceamento de carga automático, excelente dimensionamento horizontal, limpeza automática de recursos e tolerância automática a falhas.
Informações gerais
Os clientes de Tunnel suportam os seguintes recursos para processar dados completos e incrementais: balanceamento de carga, recuperação de falhas, checkpoints e sincronização de informações de partição para garantir a sequência de consumo. Dessa forma, você pode se concentrar na lógica de processamento de cada registro.
Para obter o código de exemplo detalhado dos clientes de Tunnel, acesse Github.
Processamento automático de dados
Os clientes de Tunnel verificam heartbeats regularmente para detectar canais ativos, atualizar o status de Channel e ChannelConnect, além de inicializar, executar e encerrar tarefas de processamento de dados.
Inicialize os recursos dos clientes de Tunnel.
Altere o estado do cliente de Tunnel de Ready para Started.
Defina HeartbeatTimeout e ClientTag em TunnelWorkerConfig para executar a tarefa ConnectTunnel e conectar-se ao Tunnel Service para obter o ClientId do cliente de Tunnel atual.
Inicialize o ChannelDialer para criar uma tarefa de ChannelConnect.
Cada tarefa de ChannelConnect corresponde a um Channel. As tarefas de ChannelConnect registram checkpoints de consumo de dados.
Defina o parâmetro Callback para processamento de dados e o parâmetro CheckpointInterval para especificar o intervalo de saída de checkpoints no Tunnel Service. Dessa forma, você cria um processador de dados que gera checkpoints automaticamente.
Inicialize o TunnelStateMachine para atualizar automaticamente o status do Channel.
Verifique as mensagens de heartbeat regularmente.
Defina o parâmetro heartbeatIntervalInSec em TunnelWorkerConfig para configurar o intervalo de verificação de heartbeat.
Envie uma solicitação de heartbeat para obter a lista dos canais disponíveis mais recentes do Tunnel Service. A lista inclui o ChannelId, as versões do canal e o status do canal.
Mescle a lista de canais obtida do Tunnel Service com a lista local de canais e, em seguida, crie e atualize as tarefas de ChannelConnect. Siga estas regras:
Mesclagem: substitua a versão anterior na lista local pela versão mais recente do mesmo ChannelId do Tunnel Service e insira os novos canais do Tunnel Service na lista local.
Criação de tarefa de ChannelConnect: crie uma tarefa de ChannelConnect no estado WAIT para um canal sem tarefa de ChannelConnect. Se a tarefa de ChannelConnect corresponder a um canal no estado OPEN, execute a tarefa ReadRecords&&ProcessRecords que processa dados ciclicamente para essa tarefa de ChannelConnect. Para mais informações, consulte a classe ProcessDataPipeline no código-fonte.
Atualização de tarefa de ChannelConnect existente: após mesclar as listas de canais, se um canal corresponder a uma tarefa de ChannelConnect, atualize o estado do ChannelConnect com base no estado do canal com o mesmo ChannelId. Por exemplo, se os canais estiverem no estado CLOSE, defina o estado das tarefas de ChannelConnect correspondentes como CLOSED para encerrar as tarefas de pipeline correspondentes. Para mais informações, consulte o método ChannelConnect.notifyStatus no código-fonte.
Processe o status do canal automaticamente.
Com base no número de clientes de Tunnel ativos obtidos na solicitação de heartbeat, o Tunnel Service aloca partições disponíveis entre os diferentes clientes para balancear a carga.
O Tunnel Service processa automaticamente o status do canal conforme descrito na figura a seguir, além de gerenciar o consumo de canais e o balanceamento de carga.
O Tunnel Service e os clientes de Tunnel alteram seus status com base em heartbeats e atualizações de versão do canal.
Cada canal inicia no estado WAIT.
O canal de dados incrementais muda para o estado OPEN somente após o encerramento do consumo na partição principal.
O Tunnel Service aloca a partição no estado OPEN a cada cliente de Tunnel.
Durante o balanceamento de carga, o Tunnel Service e os clientes de Tunnel utilizam um protocolo de agendamento para alterar o estado do canal de OPEN para CLOSING e depois para CLOSED. Após consumir um canal BaseData ou Stream, os clientes de Tunnel reportam o canal como encerrado.

Balanceamento de carga automático e excelente dimensionamento horizontal
Vários clientes de Tunnel podem consumir dados usando o mesmo Tunnel ou TunnelId. Quando os clientes de Tunnel executam a tarefa de heartbeat, o Tunnel Service redistribui automaticamente os canais e tenta alocar canais ativos a cada cliente de Tunnel para obter balanceamento de carga.
Adicione clientes de Tunnel para escalar a capacidade de consumo de dados. Os clientes de Tunnel podem ser executados em uma ou mais instâncias.
Limpeza automática de recursos e tolerância a falhas
Limpeza de recursos: se os clientes de Tunnel não forem encerrados normalmente, como em caso de saída excepcional ou encerramento manual, o sistema recicla os recursos automaticamente. Por exemplo, o sistema libera o pool de threads, chama o método shutdown registrado para o canal correspondente e encerra a conexão com o Tunnel Service.
Tolerância a falhas: quando erros não paramétricos, como timeout de heartbeat, ocorrem em um cliente de Tunnel, o sistema renova automaticamente as conexões para manter o consumo estável de dados.