Partilhar via


Como criar uma aplicação Java que utilize Azure Cosmos DB para NoSQL e processador de feed de alterações

O Azure Cosmos DB é um serviço de base de dados NoSQL totalmente gerido fornecido pela Microsoft. Permite-lhe construir aplicações distribuídas globalmente e altamente escaláveis com facilidade. Este guia guia-o pelo processo de criação de uma aplicação Java que utiliza a base de dados Azure Cosmos DB para NoSQL e implementa o Processador de Fluxo de Alterações para processamento de dados em tempo real. A aplicação Java comunica com o Azure Cosmos DB para NoSQL usando o Azure Cosmos DB Java SDK v4.

Importante

Este tutorial é apenas para o Azure Cosmos DB Java SDK v4. Por favor, consulte as notas de atualização do Azure Cosmos DB Java SDK v4, o repositório Maven, o processador de feed de alterações no Azure Cosmos DB e o guia de resolução de problemas do Azure Cosmos DB Java SDK v4 para mais informações. Se você estiver usando uma versão mais antiga do que a v4, consulte o guia Migrar para o SDK Java do Azure Cosmos DB v4 para obter ajuda na atualização para a v4.

Pré-requisitos

  • Conta Azure Cosmos DB: pode criá-la a partir do portal Azure ou usar também o emulador Azure Cosmos DB .

  • Ambiente de Desenvolvimento Java: Certifique-se de que tem o Java Development Kit (JDK) instalado na sua máquina com pelo menos 8 versões.

  • Azure Cosmos DB Java SDK V4: fornece as funcionalidades necessárias para interagir com o Azure Cosmos DB.

Contexto geral

O feed de alterações do Azure Cosmos DB fornece uma interface orientada por eventos para desencadear ações em resposta à inserção de documentos, que tem muitas utilizações.

A gestão dos eventos do feed de alterações é, em grande parte, realizada pela biblioteca do processador do feed de alterações incorporada no SDK. Esta biblioteca é suficientemente poderosa para distribuir eventos do feed de alterações entre vários trabalhadores, se assim se desejar. Tudo o que tens de fazer é fornecer um callback à biblioteca do feed de alterações.

Este exemplo simples de aplicação Java está a demonstrar processamento de dados em tempo real com o Azure Cosmos DB e o Change Feed Processor. A aplicação insere documentos de exemplo num "contentor de alimentação" para simular um fluxo de dados. O Processador de Feed de Alterações, associado ao contentor do feed, processa as alterações recebidas e regista o conteúdo do documento. O processador gere automaticamente os arrendamentos para processamento paralelo.

Código fonte

Pode clonar o repositório de exemplo do SDK e encontrar este exemplo em SampleChangeFeedProcessor.java:

git clone https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples.git
cd azure-cosmos-java-sql-api-sample/src/main/java/com/azure/cosmos/examples/changefeed/

Walkthrough

  1. Configure-o ChangeFeedProcessorOptions numa aplicação Java usando Azure Cosmos DB e Azure Cosmos DB Java SDK V4. O ChangeFeedProcessorOptions fornece definições essenciais para controlar o comportamento do Processador de Feeds de Alterações durante o processamento de dados.

    options = new ChangeFeedProcessorOptions();
    options.setStartFromBeginning(false);
    options.setLeasePrefix("myChangeFeedDeploymentUnit");
    options.setFeedPollDelay(Duration.ofSeconds(5));
    options.setFeedPollThroughputControlConfig(throughputControlGroupConfig);
    
  2. Inicialize o ChangeFeedProcessor com configurações relevantes, incluindo o nome do anfitrião, contentor de alimentação, contentor de arrendamento e lógica de tratamento de dados. O método start() inicia o processamento de dados, permitindo o processamento concorrente e em tempo real das alterações de dados recebidas do contentor de alimentação.

    logger.info("Start Change Feed Processor on worker (handles changes asynchronously)");
    ChangeFeedProcessor changeFeedProcessorInstance = new ChangeFeedProcessorBuilder()
        .hostName("SampleHost_1")
        .feedContainer(feedContainer)
        .leaseContainer(leaseContainer)
        .handleChanges(handleChanges())
        .options(options)
        .buildChangeFeedProcessor();
    changeFeedProcessorInstance.start()
                               .subscribeOn(Schedulers.boundedElastic())
                               .subscribe();
    
  3. Especifique que o delegado gere as alterações de dados recebidas usando o handleChanges() método. O método processa os documentos JsonNode recebidos a partir do Change Feed. Como programador, tens duas opções para gerir o documento JsonNode fornecido pelo Change Feed. Uma opção é operar no documento sob a forma de um JsonNode. Isto é ótimo, especialmente se não tiveres um modelo de dados único e uniforme para todos os documentos. A segunda opção – transformar o JsonNode num POJO com a mesma estrutura do JsonNode. Depois podes operar no POJO.

    private static Consumer<List<JsonNode>> handleChanges() {
        return (List<JsonNode> docs) -> {
            logger.info("Start handleChanges()");
    
            for (JsonNode document : docs) {
                try {
                    //Change Feed hands the document to you in the form of a JsonNode
                    //As a developer you have two options for handling the JsonNode document provided to you by Change Feed
                    //One option is to operate on the document in the form of a JsonNode, as shown below. This is great
                    //especially if you do not have a single uniform data model for all documents.
                    logger.info("Document received: " + OBJECT_MAPPER.writerWithDefaultPrettyPrinter()
                            .writeValueAsString(document));
    
                    //You can also transform the JsonNode to a POJO having the same structure as the JsonNode,
                    //as shown below. Then you can operate on the POJO.
                    CustomPOJO2 pojo_doc = OBJECT_MAPPER.treeToValue(document, CustomPOJO2.class);
                    logger.info("id: " + pojo_doc.getId());
    
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
            isWorkCompleted = true;
            logger.info("End handleChanges()");
    
        };
    }
    
  4. Constrói e executa a aplicação Java. A aplicação inicia o Processador de Alimentação de Alterações, insere documentos de exemplo no contentor de alimentação e processa as alterações recebidas.

Conclusion

Neste guia, aprendeu a criar uma aplicação Java usando o Azure Cosmos DB Java SDK V4 que utiliza a base de dados Azure Cosmos DB for NoSQL e o Processador de Fluxo de Alterações para processamento de dados em tempo real. Pode estender esta aplicação para lidar com casos de uso mais complexos e construir aplicações robustas, escaláveis e distribuídas globalmente usando o Azure Cosmos DB.

Recursos adicionais

Próximos passos

Pode agora aprender mais sobre o estimador do feed de alterações nos seguintes artigos: