Service de diffusion en continu et trousse SDK pour JavaScript - Démarrage rapide

Publiez et consommez des messages dans le service de diffusion en continu à l'aide de la trousse SDK OCI pour JavaScript.

Ce démarrage rapide vous montre comment utiliser la trousse SDK Oracle Cloud Infrastructure (OCI) pour TypeScript et JavaScript et Oracle Cloud Infrastructure Streaming pour publier et consommer des messages.

Pour les concepts clés et plus de détails sur le service de diffusion en continu, voir Aperçu du service de diffusion en continu. Pour plus d'informations sur l'utilisation des trousses SDK pour OCI, consultez les guides sur les SDK.

Préalables

  1. Pour utiliser la trousse SDK pour TypeScript et JavaScript, vous devez disposer des éléments suivants :

    • Un compte Oracle Cloud Infrastructure
    • Utilisateur créé dans ce compte, dans un groupe avec une politique qui accorde les autorisations requises. Il peut s'agir d'un utilisateur pour vous-même, une autre personne ou un autre système qui doit appeler l'API. Pour des exemples sur la configuration d'un nouvel utilisateur, d'un groupe, d'un compartiment et d'une politique, voir Ajout d'utilisateurs. Pour obtenir la liste des politiques types que vous pouvez utiliser, voir Politiques communes.
    • Une paire de clés utilisée pour signer des demandes d'API, avec la clé publique chargée dans Oracle. Seul l'utilisateur appelant l'API doit disposer de la clé privée. Pour plus d'informations, voir Introduction.
  2. Collectez le point d'extrémité et l'OCID des messages d'un flux. Pour les étapes d'obtention des détails d'un flux, voir Obtention des détails d'un flux. Aux fins de ce démarrage rapide, le flux doit utiliser un point d'extrémité public et laisser Oracle gérer le chiffrement. Reportez-vous aux sections Création d'un flux et Création d'un groupe de flux si vous n'avez pas de flux existant.
  3. Node.js version 8.x ou ultérieure. Téléchargez la dernière version avec soutien à long terme.
  4. Visual Code Studio (recommandé) ou tout autre environnement de développement intégré (IDE).
  5. Ouvrez une invite de commande contenant npm dans son chemin, accédez au répertoire où vous voulez conserver votre code pour ce démarrage rapide (wd, par exemple), puis exécutez la commande suivante pour installer la trousse SDK OCI pour JavaScript :

    npm install oci-sdk
  6. Assurez-vous de disposer d'un fichier de configuration de trousse SDK valide. Pour les environnements de production, vous devez utiliser l'autorisation du principal d'instance.

Production de messages

  1. Ouvrez votre éditeur favori, tel que Visual Studio Code, à partir du répertoire wd. Une fois les préalables satisfaits, les ensembles oci-sdk pour JavaScript doivent déjà être installés dans ce répertoire.
  2. Créez un fichier nommé Producer.js dans le répertoire wd avec le code suivant. Remplacez les valeurs des variables ociConfigFile, ociProfileName, ociStreamOcid et ociMessageEndpointForStream dans l'extrait de code suivant par les valeurs applicables à votre location.

    const common = require("oci-common");
    const st = require("oci-streaming"); // OCI SDK package for OSS
    
    const ociConfigFile = "<config_file_path>";
    const ociProfileName = "<config_file_profile_name>";
    const ociMessageEndpointForStream = "<stream_message_endpoint>";
    const ociStreamOcid = "<stream_OCID>";
    
    // provide authentication for OCI and OSS
    const provider = new common.ConfigFileAuthenticationDetailsProvider(ociConfigFile, ociProfileName);
      
    async function main() {
      // OSS client to produce and consume messages from a Stream in OSS
      const client = new st.StreamClient({ authenticationDetailsProvider: provider });
    
      client.endpoint = ociMessageEndpointForStream;
    
      // build up a putRequest and publish some messages to the stream
      let messages = [];
      for (let i = 1; i <= 3; i++) {
        let entry = {
          key: Buffer.from("messageKey" + i).toString("base64"),
          value: Buffer.from("messageValue" + i).toString("base64")
        };
        messages.push(entry);
      }
    
      console.log("Publishing %s messages to stream %s.", messages.length, ociStreamOcid);
      const putMessageDetails = { messages: messages };
      const putMessagesRequest = {
        putMessagesDetails: putMessageDetails,
        streamId: ociStreamOcid
      };
      const putMessageResponse = await client.putMessages(putMessagesRequest);
      for (var entry of putMessageResponse.putMessagesResult.entries)
        console.log("Published messages to parition %s, offset %s", entry.partition, entry.offset);
    
    }
    
    main().catch((err) => {
      console.log("Error occurred: ", err);
    });
  3. Depuis le répertoire wd, exécutez la commande suivante :

    node run Producer.js
  4. Afficher les derniers messages envoyés au flux pour voir les derniers messages envoyés au flux pour vérifier que la production a réussi.

Consommation de messages

  1. Assurez-vous tout d'abord que le flux à partir duquel vous voulez consommer des messages contient des messages. Vous pouvez utiliser la console pour produire un message de test ou utiliser le flux et les messages que nous avons créés dans ce démarrage rapide.
  2. Ouvrez votre éditeur favori, tel que Visual Studio Code, à partir du répertoire wd. Une fois les préalables satisfaits, les ensembles oci-sdk pour JavaScript doivent déjà être installés dans ce répertoire.
  3. Créez un fichier nommé Consumer.js dans le répertoire wd avec le code suivant. Remplacez les valeurs des variables ociConfigFile, ociProfileName, ociStreamOcid et ociMessageEndpointForStream dans l'extrait de code suivant par les valeurs applicables à votre location.

    const common = require("oci-common");
    const st = require("oci-streaming"); // OCI SDK package for OSS
    
    const ociConfigFile = "<config_file_path>";
    const ociProfileName = "<config_file_profile_name>";
    const ociMessageEndpointForStream = "<stream_message_endpoint>";
    const ociStreamOcid = "<stream_OCID>";
    
    // provide authentication for OCI and OSS
    const provider = new common.ConfigFileAuthenticationDetailsProvider(ociConfigFile, ociProfileName);
      
    const consumerGroupName = "exampleGroup";
    const consumerGroupInstanceName = "exampleInstance-1";
    
    async function main() {
      // OSS client to produce and consume messages from a Stream in OSS
      const client = new st.StreamClient({ authenticationDetailsProvider: provider });
      client.endpoint = ociMessageEndpointForStream;
    
      // A cursor can be created as part of a consumer group.
      // Committed offsets are managed for the group, and partitions
      // are dynamically balanced amongst consumers in the group.
      console.log("Starting a simple message loop with a group cursor");
      const groupCursor = await getCursorByGroup(client, ociStreamOcid, consumerGroupName, consumerGroupInstanceName);
      await consumerMsgLoop(client, ociStreamOcid, groupCursor);
    }
    
    main().catch((err) => {
        console.log("Error occurred: ", err);
    }); 
    
    async function consumerMsgLoop(client, streamId, initialCursor) {
        let cursor = initialCursor;
        for (var i = 0; i < 10; i++) {
          const getRequest = {
            streamId: streamId,
            cursor: cursor,
            limit: 2
          };
          const response = await client.getMessages(getRequest);
          console.log("Read %s messages.", response.items.length);
          for (var message of response.items) {
            if (message.key !== null)  {         
                console.log("%s: %s",
                Buffer.from(message.key, "base64").toString(),
                Buffer.from(message.value, "base64").toString());
            }
           else{
                console.log("Null: %s",
                    Buffer.from(message.value, "base64").toString() );
           }
          }
          // getMessages is a throttled method; clients should retrieve sufficiently large message
          // batches, as to avoid too many http requests.
          await delay(2);
          cursor = response.opcNextCursor;
        }
      }
      
    
    async function getCursorByGroup(client, streamId, groupName, instanceName) {
        console.log("Creating a cursor for group %s, instance %s.", groupName, instanceName);
        const cursorDetails = {
          groupName: groupName,
          instanceName: instanceName,
          type: st.models.CreateGroupCursorDetails.Type.TrimHorizon,
          commitOnGet: true
        };
        const createCursorRequest = {
          createGroupCursorDetails: cursorDetails,
          streamId: streamId
        };
        const response = await client.createGroupCursor(createCursorRequest);
        return response.cursor.value;
    }
    
    async function delay(s) {
        return new Promise(resolve => setTimeout(resolve, s * 1000));
    }
  4. Depuis le répertoire wd, exécutez la commande suivante :

    node run Consumer.js
  5. Des messages similaires aux suivants doivent s'afficher :

    Starting a simple message loop with a group cursor
    Creating a cursor for group exampleGroup, instance exampleInstance-1.
    Read 1 messages.
    Null: Example Test Message 0
    Read 1 messages.
    Null: Example Test Message 0
    Read 1 messages.
    Null: Example Test Message 0
    Read 2 messages.
    Null: Example Test Message 0
    Null: Example Test Message 0
    Read 2 messages.
    Null: Example Test Message 0
    Null: Example Test Message 0
    Note

    Si vous avez utilisé la console pour produire un message de test, la clé de chaque message est Null.