SDK de inicio rápido de Streaming para JavaScript
Publique y consuma mensajes en el servicio Streaming mediante el SDK de OCI para JavaScript.
En este inicio rápido se muestra cómo utilizar el SDK de Oracle Cloud Infrastructure (OCI) para TypeScript y JavaScript y Oracle Cloud Infrastructure Streaming para publicar y consumir mensajes.
Para conocer los conceptos clave y más detalles de Streaming, consulte Visión general de Streaming. Para obtener más información sobre el uso de los SDK de OCI, consulte las Guías sobre SDK.
Requisitos
-
Para utilizar el SDK para TypeScript y JavaScript, debe tener lo siguiente:
- Una cuenta de Oracle Cloud Infrastructure.
- Un usuario creado en esa cuenta, en un grupo con una política que otorgue los permisos necesarios. Este usuario puede ser usted mismo u otra persona/sistema que necesite llamar a la API. Para obtener un ejemplo de cómo configurar un nuevo usuario, grupo, compartimento y política, consulte Adición de usuarios. Para obtener una lista de las políticas típicas que puede que desee utilizar, consulte Políticas Comunes.
- Par de claves utilizado para firmar solicitudes de API con la clave pública cargada en Oracle. Solo el usuario que llama a la API debe poseer la clave privada. Para obtener más información, consulte Introducción.
- Recopile el punto final de mensajes y el OCID de un flujo. Para obtener más información sobre un flujo, consulte Obtención de detalles de un flujo. Para este inicio rápido, el flujo debe utilizar un punto final público y permitir que Oracle gestione el cifrado. Consulte Creación de un flujo y Creación de un pool de flujos si no tiene un flujo existente.
- Node.js versión 8.x o posterior. Descargue la versión de soporte a largo plazo (LTS) más reciente.
- Visual Code Studio (recomendado) o cualquier otro entorno de desarrollo integrado (IDE).
-
Abra un símbolo del sistema que tenga
npm
en su ruta de acceso, cambie al directorio donde desea guardar el código para este inicio rápido (por ejemplo,wd
) y, a continuación, ejecute el siguiente comando para instalar el SDK de OCI para JavaScript:npm install oci-sdk
- Asegúrese de que tiene un archivo de configuración de SDK válido. Para entornos de producción, debe utilizar la autorización de principal de instancia.
Producción de mensajes
- Abra su editor favorito, como Visual Studio Code, desde el directorio
wd
. Ya debe tener los paquetesoci-sdk
para JavaScript instalados en este directorio después de cumplir los requisitos. -
Cree un archivo denominado
Producer.js
en el directoriowd
con el siguiente código. Sustituya los valores de las variablesociConfigFile
,ociProfileName
,ociStreamOcid
yociMessageEndpointForStream
en el siguiente fragmento de código por los valores aplicables a su arrendamiento.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); });
-
Desde el directorio
wd
, ejecute el siguiente comando:node run Producer.js
- Mostrar los últimos mensajes enviados al flujo para ver los últimos mensajes enviados al flujo para verificar que la producción se ha realizado correctamente.
Consumo de mensajes
- En primer lugar, asegúrese de que el flujo del que desea consumir mensajes contiene mensajes. Puede utilizar la consola para producir un mensaje de prueba o utilizar el flujo y los mensajes que hemos creado en este inicio rápido.
- Abra su editor favorito, como Visual Studio Code, desde el directorio
wd
. Debe tener los paquetesoci-sdk
para JavaScript instalados en este directorio después de cumplir los requisitos. -
Cree un archivo denominado
Consumer.js
en el directoriowd
con el siguiente código. Sustituya los valores de las variablesociConfigFile
,ociProfileName
,ociStreamOcid
yociMessageEndpointForStream
en el siguiente fragmento de código por los valores aplicables a su arrendamiento.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)); }
-
Desde el directorio
wd
, ejecute el siguiente comando:node run Consumer.js
-
Se mostrarán mensajes similares a los siguientes:
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
Si ha utilizado la consola para producir un mensaje de prueba, la clave de cada mensaje esNull
Pasos siguientes
Consulte los siguientes recursos para obtener más información:
- SDK de OCI para JavaScript en GitHub
- Ejemplos de SDK de OCI para JavaScript