SDK per JavaScript Avvio rapido dello streaming
Pubblica e utilizza i messaggi nel servizio di streaming utilizzando l'SDK OCI per JavaScript.
Questo avvio rapido mostra come utilizzare Oracle Cloud Infrastructure (OCI) SDK for TypeScript and JavaScript e Oracle Cloud Infrastructure Streaming per pubblicare e utilizzare i messaggi.
Per i concetti chiave e ulteriori dettagli sullo streaming, vedere Panoramica dello streaming. Per ulteriori informazioni sull'uso degli SDK OCI, consulta le guide SDK.
Prerequisiti
-
Per utilizzare l'SDK per TypeScript e JavaScript, è necessario disporre dei seguenti elementi:
- Un account Oracle Cloud Infrastructure.
- Utente creato in tale account, in un gruppo con un criterio che concede le autorizzazioni necessarie. Questo utente può essere te stesso o un'altra persona/sistema che deve chiamare l'API. Per un esempio su come impostare un nuovo utente, gruppo, compartimento e criterio, vedere Aggiunta di utenti. Per un elenco dei criteri tipici che si desidera utilizzare, vedere Criteri comuni.
- Coppia di chiavi utilizzata per firmare le richieste API, con la chiave pubblica caricata in Oracle. Solo l'utente che chiama l'API deve possedere la chiave privata. Per ulteriori informazioni, vedere Guida introduttiva.
- Raccogliere l'endpoint e l'OCID dei messaggi di un flusso. Per i passi per ottenere i dettagli per un flusso, vedere Recupero dei dettagli per un flusso. Ai fini di questo avvio rapido, il flusso deve utilizzare un endpoint pubblico e consentire a Oracle di gestire la cifratura. Se non si dispone di un flusso esistente, vedere Creazione di un flusso e Creazione di un pool di flussi.
- Node.js versione 8.x o successiva. Scarica la versione più recente del supporto a lungo termine (LTS).
- Visual Code Studio (consigliato) o qualsiasi altro ambiente di sviluppo integrato (IDE).
-
Aprire un prompt dei comandi con
npm
nel relativo percorso, passare alla directory in cui si desidera conservare il codice per questo avvio rapido (ad esempio,wd
), quindi eseguire il comando seguente per installare l'SDK OCI per JavaScript:npm install oci-sdk
- Assicurarsi di disporre di un file di configurazione SDK valido. Per gli ambienti di produzione, è necessario utilizzare l'autorizzazione principal dell'istanza.
Produzione di messaggi
- Aprire l'editor preferito, ad esempio Visual Studio Code, dalla directory
wd
. È necessario che in questa directory siano già installati i pacchettioci-sdk
per JavaScript dopo aver soddisfatto i prerequisiti. -
Creare un file denominato
Producer.js
nella directorywd
con il codice seguente. Sostituire i valori delle variabiliociConfigFile
,ociProfileName
,ociStreamOcid
eociMessageEndpointForStream
nello snippet di codice seguente con i valori applicabili per la tenancy in uso.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); });
-
Dalla directory
wd
, eseguire il comando seguente:node run Producer.js
- Mostra i messaggi più recenti inviati al flusso per visualizzare i messaggi più recenti inviati al flusso per verificare che la produzione sia riuscita.
Messaggi di consumo
- In primo luogo, assicurarsi che il flusso da cui si desidera utilizzare i messaggi contenga messaggi. È possibile utilizzare la console per generare un messaggio di test oppure utilizzare il flusso e i messaggi creati in questo avvio rapido.
- Aprire l'editor preferito, ad esempio Visual Studio Code, dalla directory
wd
. È necessario che i pacchettioci-sdk
per JavaScript siano già installati in questa directory dopo aver soddisfatto i prerequisiti. -
Creare un file denominato
Consumer.js
nella directorywd
con il codice seguente. Sostituire i valori delle variabiliociConfigFile
,ociProfileName
,ociStreamOcid
eociMessageEndpointForStream
nello snippet di codice seguente con i valori applicabili per la tenancy in uso.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)); }
-
Dalla directory
wd
, eseguire il comando seguente:node run Consumer.js
-
Dovresti vedere messaggi simili ai seguenti:
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
Nota
Se è stata utilizzata la console per generare un messaggio di test, la chiave per ogni messaggio èNull
Passo successivo
Per ulteriori informazioni, consultare le risorse elencate di seguito.
- SDK OCI per JavaScript su GitHub
- SDK OCI per JavaScript esempi