SDK de inicio rápido de Streaming para TypeScript
Publique y consuma mensajes en el servicio Streaming mediante el SDK de OCI para TypeScript.
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 obtener más información sobre conceptos clave y Streaming, consulte Visión general de Streaming. Para obtener más información sobre el uso de el SDK de OCI, consulte las Guías sobre el 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 detalles 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.
-
Instale el intérprete TypeScript para NodeJS de forma global:
npm install -g typescript - Visual Code Studio (recomendado) o cualquier otro entorno de desarrollo integrado (IDE).
-
Abra un símbolo del sistema que tenga
npmen 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 TypeScript:npm install oci-sdkTambién puede ser más eficaz con las dependencias instalando solo los paquetes del SDK de TypeScript de OCI para la autenticación y Streaming:
npm install oci-common npm install oci-streaming - 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-sdkpara TypeScript instalados en este directorio después de cumplir los requisitos. -
Cree un archivo denominado
Producer.tsen el directoriowdcon el siguiente código. Sustituya los valores de las variablesociConfigFile,ociProfileName,ociStreamOcidyociMessageEndpointForStreamen 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>"; // 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); }); -
Desde el terminal, en el directorio
wd, ejecute el siguiente comando para compilarProducer.tsy generarProducer.js:tsc Producer.ts -
Desde el mismo directorio, ejecute el siguiente comando:
node run Producer.jsDeberá mostrarse una salida de terminal similar a la siguiente:
$:/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 - 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. Ya debe tener los paquetesoci-sdkpara TypeScript instalados en este directorio después de cumplir los requisitos. -
Cree un archivo denominado
Consumer.tsen el directoriowdcon el siguiente código. Sustituya los valores de las variablesociConfigFile,ociProfileName,ociStreamOcidyociMessageEndpointForStreamen 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>"; // 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); }); -
Desde el terminal, en el directorio
wd, ejecute el siguiente comando para compilarConsumer.tsy generarConsumer.js:tsc Consumer.ts -
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 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.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 TypeScript en GitHub
- Ejemplos de SDK de OCI para TypeScript