SDK para Início Rápido de Streaming do JavaScript
Publique e consuma mensagens no serviço Streaming usando o OCI SDK para JavaScript.
Este início rápido mostra como usar o OCI (Oracle Cloud Infrastructure) SDK for TypeScript e JavaScript e o Oracle Cloud Infrastructure Streaming para publicar e consumir mensagens.
Para obter os principais conceitos e mais detalhes do Streaming, consulte Visão Geral do Streaming. Para obter mais informações sobre como usar os SDKs do OCI, consulte os Guias SDK.
Pré-requisitos
-
Para usar o SDK para TypeScript e JavaScript, você deve ter o seguinte:
- Uma conta do Oracle Cloud Infrastructure.
- Um usuário criado nessa conta, em um grupo com uma política que conceda as permissões necessárias. Esse usuário pode ser você mesmo ou outra pessoa/sistema que precise chamar a API. Para obter um exemplo de como configurar um novo usuário, um novo grupo, um novo compartimento e uma nova política, consulte Adicionando Usuários. Para obter uma lista de políticas típicas que você pode usar, consulte Políticas Comuns.
- Um par de chaves usado para assinar solicitações de API, com a chave pública carregada por upload no sistema Oracle. Somente o usuário que chama a API deve possuir a chave privada. Para obter mais informações, consulte Conceitos Básicos.
- Colete o ponto final e o OCID das Mensagens de um stream. Para obter etapas para obter detalhes de um stream, consulte Obtendo Detalhes de um Stream. Para os fins deste início rápido, o stream deve usar um ponto final público e permitir que a Oracle gerencie a criptografia. Consulte Criando um Stream e Criando um Pool de Streams se você não tiver um stream existente.
- Node.js versão 8.x ou posterior. Faça download da última versão com suporte de longo prazo (LTS).
- Visual Code Studio (recomendado) ou qualquer outro ambiente de desenvolvimento integrado (IDE).
-
Abra um prompt de comando que tenha
npm
em seu caminho, vá para o diretório no qual você deseja manter seu código para esse início rápido (wd
, por exemplo) e execute o seguinte comando para instalar o OCI SDK for JavaScript:npm install oci-sdk
- Verifique se você tem um arquivo de configuração do SDK válido. Para ambientes de produção, você deve usar a autorização do controlador de instâncias.
Produzindo Mensagens
- Abra seu editor favorito, como o Visual Studio Code, no diretório
wd
. Você já deverá ter pacotesoci-sdk
para JavaScript instalados neste diretório após ter atendido aos pré-requisitos. -
Crie um arquivo chamado
Producer.js
no diretóriowd
com o código a seguir. Substitua os valores das variáveisociConfigFile
,ociProfileName
,ociStreamOcid
eociMessageEndpointForStream
no trecho de código a seguir pelos valores aplicáveis à sua tenancy.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); });
-
No diretório
wd
, execute o seguinte comando:node run Producer.js
- Mostrar as mensagens mais recentes enviadas ao stream para ver as mensagens mais recentes enviadas ao stream para verificar se a produção foi bem-sucedida.
Consumindo Mensagens
- Primeiro, certifique-se de que o stream cujas mensagens você deseja consumir contenha mensagens. Você pode usar a Console para produzir uma mensagem de teste ou usar o stream e as mensagens que criamos neste início rápido.
- Abra seu editor favorito, como o Visual Studio Code, no diretório
wd
. Você já deverá ter os pacotesoci-sdk
para JavaScript instalados neste diretório após atender aos pré-requisitos. -
Crie um arquivo chamado
Consumer.js
no diretóriowd
com o código a seguir. Substitua os valores das variáveisociConfigFile
,ociProfileName
,ociStreamOcid
eociMessageEndpointForStream
no trecho de código a seguir pelos valores aplicáveis à sua tenancy.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)); }
-
No diretório
wd
, execute o seguinte comando:node run Consumer.js
-
Você deverá ver mensagens semelhantes a esta:
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
Observação
Se você usou a Console para produzir uma mensagem de teste, a chave de cada mensagem seráNull
Próximas Etapas
Consulte os seguintes recursos para obter mais informações:
- OCI SDK for JavaScript no GitHub
- Exemplos do OCI SDK for JavaScript