Service de diffusion en continu et trousse SDK pour TypeScript - Démarrage rapide
Publiez et consommez des messages dans le service de diffusion en continu à l'aide de la trousse SDK OCI pour TypeScript.
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
-
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.
- 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.
- Node.js version 8.x ou ultérieure. Téléchargez la dernière version avec soutien à long terme.
-
Installez l'interpréteur TypeScript pour NodeJS globalement :
npm install -g typescript
- Visual Code Studio (recommandé) ou tout autre environnement de développement intégré (IDE).
-
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 TypeScript :npm install oci-sdk
Vous pouvez également gagner en efficacité avec les dépendances en installant uniquement les ensembles de trousses SDK TypeScript pour OCI pour l'authentification et le service de diffusion en continu :
npm install oci-common npm install oci-streaming
- 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
- Ouvrez votre éditeur favori, tel que Visual Studio Code, à partir du répertoire
wd
. Une fois les préalables satisfaits, les ensemblesoci-sdk
pour TypeScript doivent déjà être installés dans ce répertoire. -
Créez un fichier nommé
Producer.ts
dans le répertoirewd
avec le code suivant. Remplacez les valeurs des variablesociConfigFile
,ociProfileName
,ociStreamOcid
etociMessageEndpointForStream
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>"; // example value "https://cell-1.streaming.region.oci.oraclecloud.com" 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); });
-
Dans le terminal du répertoire
wd
, exécutez la commande suivante pour compilerProducer.ts
et générerProducer.js
:tsc Producer.ts
-
Depuis le même répertoire, exécutez la commande suivante :
node run Producer.js
Vous devriez voir une sortie de terminal similaire à la suivante :
$:/path/to/directory/wd>node Producer.js Publishing 3 messages to stream ocid1.stream.oc1.exampleuniqueID. Published messages to parition 0, offset 1314 Published messages to parition 0, offset 1315 Published messages to parition 0, offset 1316
- 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
- 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.
- Ouvrez votre éditeur favori, tel que Visual Studio Code, à partir du répertoire
wd
. Une fois les préalables satisfaits, les ensemblesoci-sdk
pour TypeScript doivent déjà être installés dans ce répertoire. -
Créez un fichier nommé
Consumer.ts
dans le répertoirewd
avec le code suivant. Remplacez les valeurs des variablesociConfigFile
,ociProfileName
,ociStreamOcid
etociMessageEndpointForStream
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>"; // example value "https://cell-1.streaming.region.oci.oraclecloud.com" 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; // Use a cursor for getting messages; each getMessages call will return a next-cursor for iteration. // There are a couple kinds of cursors, we will use group cursors // 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, "exampleGroup01000", "exampleInstance-1"); await simpleMessageLoop(client, ociStreamOcid, groupCursor); } 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 simpleMessageLoop(client, streamId, initialCursor) { let cursor = initialCursor; for (var i = 0; i < 5; i++) { const getRequest = { streamId: streamId, cursor: cursor, limit: 100 }; 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("Key: %s, Value: %s, Partition: %s", Buffer.from(message.key, "base64").toString(), Buffer.from(message.value, "base64").toString(), Buffer.from(message.partition, "utf8").toString()); } else{ console.log("Key: Null, Value: %s, Partition: %s", Buffer.from(message.value, "base64").toString(), Buffer.from(message.partition, "utf8").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 delay(s) { return new Promise(resolve => setTimeout(resolve, s * 1000)); } main().catch((err) => { console.log("Error occurred: ", err); });
-
Dans le terminal du répertoire
wd
, exécutez la commande suivante pour compilerConsumer.ts
et générerConsumer.js
:tsc Consumer.ts
-
Depuis le répertoire
wd
, exécutez la commande suivante :node run Consumer.js
-
Des messages similaires aux suivants doivent s'afficher :
Starting a simple message loop with a group cursor Creating a cursor for group exampleGroup01000, instance exampleInstance-1. Read 6 messages. Key: messageKey1, Value: messageValue1, Partition: 0 Key: messageKey2, Value: messageValue2, Partition: 0 Key: messageKey3, Value: messageValue3, Partition: 0 Key: Null, Value: message value and key null, Partition: 0 Key: Null, Value: message value and key null, Partition: 0 Key: Null, Value: message value and key null, Partition: 0 Read 0 messages. Read 0 messages. Read 0 messages. Read 0 messages.
Note
Si vous avez utilisé la console pour produire un message de test, la clé de chaque message estNull
.
Étapes suivantes
Pour plus d'informations, voir les ressources suivantes :
- Trousse SDK OCI pour TypeScript sur GitHub
- Exemples de trousse SDK OCI pour TypeScript