Condividi tramite


Come creare un'applicazione Java che usa Azure Cosmos DB per NoSQL e il processore del feed di modifiche

SI APPLICA A: NoSQL

Azure Cosmos DB è un servizio di database NoSQL completamente gestito fornito da Microsoft. Consente di creare con facilità applicazioni distribuite a livello globale e altamente scalabili. Questa guida pratica illustra il processo di creazione di un'applicazione Java che usa il database Azure Cosmos DB per NoSQL e implementa il processore del feed di modifiche per l'elaborazione dei dati in tempo reale. L'applicazione Java comunica con Azure Cosmos DB per NoSQL usando Java SDK v4 per Azure Cosmos DB.

Importante

Questa esercitazione è destinata solo a Java SDK v4 per Azure Cosmos DB. Per ottenere maggiori informazioni, consultare le note sulla versione di Java SDK v4 per Azure Cosmos DB, il repository Maven, Processore del feed di modifiche in Azure Cosmos DB e la guida alla risoluzione dei problemi di Java SDK v4 per Azure Cosmos DB. Se attualmente si usa una versione precedente a v4, vedere l'articolo Eseguire la migrazione a Java SDK v4 per Azure Cosmos DB per informazioni sull'aggiornamento a v4.

Prerequisiti

  • Account Azure Cosmos DB: è possibile crearlo dal portale di Azure oppure utilizzare l'emulatore di Azure Cosmos DB.

  • Ambiente di sviluppo Java: assicurarsi di aver installato Java Development Kit (JDK) sul proprio computer con versione 8 o successiva.

  • Azure Cosmos DB Java SDK V4: fornisce le funzionalità necessarie per interagire con Azure Cosmos DB.

Background

Il feed di modifiche di Azure Cosmos DB fornisce un'interfaccia basata su eventi per attivare le azioni in risposta all'inserimento di documenti che hanno molti usi.

L'attività di gestione degli eventi del feed di modifiche viene principalmente gestita dalla libreria del processore del feed di modifiche incorporata nell'SDK. Questa libreria è sufficientemente potente da distribuire gli eventi del feed di modifiche tra più ruoli di lavoro, se desiderato. È sufficiente fornire alla libreria del feed di modifiche un callback.

Questo semplice esempio di app Java illustra l'elaborazione dei dati in tempo reale con Azure Cosmos DB e il processore del feed di modifiche. L'applicazione inserisce documenti di esempio in un "contenitore feed" per simulare un flusso di dati. Il processore del feed di modifiche, associato al contenitore feed, elabora le modifiche in ingresso e registra il contenuto del documento. Il processore gestisce automaticamente i lease per l'elaborazione parallela.

Codice sorgente

È possibile clonare il repository di esempio dell'SDK e trovare questo esempio in 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/

scenario

  1. Configurare ChangeFeedProcessorOptions in un'app Java usando Azure Cosmos DB e Azure Cosmos DB Java SDK V4. ChangeFeedProcessorOptions fornisce impostazioni essenziali per controllare il comportamento del processore del feed di modifiche durante l'elaborazione dei dati.

    options = new ChangeFeedProcessorOptions();
    options.setStartFromBeginning(false);
    options.setLeasePrefix("myChangeFeedDeploymentUnit");
    options.setFeedPollDelay(Duration.ofSeconds(5));
    
  2. Inizializzare ChangeFeedProcessor con le configurazioni pertinenti, tra cui il nome host, il contenitore feed, il contenitore lease e la logica di gestione dei dati. Il metodo start() avvia l'elaborazione dei dati, abilitando l'elaborazione simultanea e in tempo reale delle modifiche dei dati in ingresso dal contenitore feed.

    logger.info("Start Change Feed Processor on worker (handles changes asynchronously)");
    ChangeFeedProcessor changeFeedProcessorInstance = new ChangeFeedProcessorBuilder()
        .hostName("SampleHost_1")
        .feedContainer(feedContainer)
        .leaseContainer(leaseContainer)
        .handleChanges(handleChanges())
        .buildChangeFeedProcessor();
    changeFeedProcessorInstance.start()
                               .subscribeOn(Schedulers.boundedElastic())
                               .subscribe();
    
  3. Specificare che il delegato gestisce le modifiche ai dati in ingresso usando il metodo handleChanges(). Il metodo elabora i documenti JsonNode ricevuti dal feed di modifiche. Gli sviluppatori hanno a disposizione due opzioni per gestire il documento JsonNode fornito dal feed di modifiche. Un'opzione consiste nell'operare sul documento in formato JsonNode. Ciò è particolarmente utile se non si dispone di un singolo modello di dati uniforme per tutti i documenti. La seconda opzione consiste nel trasformare il documento JsonNode in documento POJO che possiede la stessa struttura di JsonNode. È quindi possibile operare sul documento 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. Compilare ed eseguire l'applicazione Java. L'applicazione avvia il processore del feed di modifiche, inserisce documenti di esempio nel contenitore feed ed elabora le modifiche in ingresso.

Conclusione

Questa guida pratica illustra come creare un'applicazione Java con Azure Cosmos DB Java SDK V4 che usa il database di Azure Cosmos DB per NoSQL e il processore del feed di modifiche per l'elaborazione dei dati in tempo reale. È possibile estendere questa applicazione per gestire casi d'uso più complessi e creare applicazioni solide, scalabili e distribuite a livello globale usando Azure Cosmos DB.

Risorse aggiuntive

Passaggi successivi

Al termine di questa guida è possibile passare agli articoli successivi per ottenere maggiori informazioni sullo strumento di stima del feed di modifiche: