SDK für TypeScript mit Streaming verwenden - Schnellstart
Veröffentlichen und konsumieren Sie Nachrichten im Streaming-Service mit dem OCI-SDK für TypeScript.
In diesem Schnellstart wird gezeigt, wie Sie das Oracle Cloud Infrastructure-(OCI-)SDK für TypeScript und JavaScript und Oracle Cloud Infrastructure Streaming verwenden, um Nachrichten zu veröffentlichen und zu konsumieren.
Wichtige Konzepte und weitere Streamingdetails finden Sie unter Überblick über Streaming. Weitere Informationen zur Verwendung der OCI-SDKs finden Sie in den SDK-Dokumentationen.
Voraussetzungen
-
Zur Verwendung des SDK für TypeScript und JavaScript ist Folgendes erforderlich:
- Ein Oracle Cloud Infrastructure-Account.
- Ein in diesem Account erstellter Benutzer in einer Gruppe mit einer Policy, die die erforderlichen Berechtigungen erteilt. Dieser Benutzer kann Ihr eigener Benutzer oder eine andere Person/ein anderes System sein, die/das die API aufrufen muss. Ein Beispiel für die Einrichtung eines neuen Benutzers, einer neuen Gruppe, eines neuen Compartments und einer neuen Policy finden Sie unter Benutzer hinzufügen. Eine Liste der typischen Policys, die Sie verwenden können, finden Sie unter Allgemeine Policys.
- Ein Schlüsselpaar zum Signieren von API-Anforderungen, wobei der Public Key bei Oracle hochgeladen wird. Nur der Benutzer, der die API aufruft, sollte im Besitz des Private Keys sein. Weitere Informationen finden Sie unter Erste Schritte.
- Erfassen Sie den Nachrichtenendpunkt und die OCID eines Streams. Die Schritte zum Abrufen von Details für einen Stream finden Sie unter Details für einen Stream abrufen. Im Rahmen dieses Schnellstarts sollte der Stream einen öffentlichen Endpunkt und die von Oracle verwaltete Verschlüsselung verwenden. Informationen hierzu finden Sie unter Streams erstellen und Streampool erstellen, wenn kein Stream vorhanden ist.
- Node.js-Version 8.x oder höher. Laden Sie die neueste Long-Term-Support-(LTS-)Version herunter.
-
Installieren Sie den TypeScript-Interpreter für NodeJS global:
npm install -g typescript
- Visual Code Studio (empfohlen) oder eine andere Integrated Development Environment (IDE).
-
Öffnen Sie eine Befehlszeile mit
npm
im Pfad, wechseln Sie zum Verzeichnis, in dem Sie den Code für diesen Schnellstart speichern möchten (z.B.wd
), und führen Sie dann den folgenden Befehl aus, um das OCI-SDK für TypeScript zu installieren:npm install oci-sdk
Alternativ können Sie effizienter mit Abhängigkeiten arbeiten, indem Sie nur die OCI-TypeScript-SDK-Packages für Authentifizierung und Streaming installieren:
npm install oci-common npm install oci-streaming
- Stellen Sie sicher, dass Sie über eine gültige SDK-Konfigurationsdatei verfügen. Verwenden Sie für Produktionsumgebungen die Instanz-Principal-Autorisierung.
Nachrichten erzeugen
- Öffnen Sie Ihren bevorzugten Editor, wie Visual Studio Code, im Verzeichnis
wd
.oci-sdk
-Packages für TypeScript sollten bereits in diesem Verzeichnis installiert sein, nachdem Sie die Schritte unter Voraussetzungen ausgeführt haben. -
Erstellen Sie eine Datei namens
Producer.ts
im Verzeichniswd
mit dem folgenden Code. Ersetzen Sie die Werte der VariablenociConfigFile
,ociProfileName
,ociStreamOcid
undociMessageEndpointForStream
im folgenden Code-Snippet durch die Werte für Ihren Mandanten.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); });
-
Führen Sie vom Terminal im Verzeichnis
wd
den folgenden Befehl aus, umProducer.ts
zu kompilieren undProducer.js
zu generieren:tsc Producer.ts
-
Führen Sie in demselben Verzeichnis den folgenden Befehl aus:
node run Producer.js
Daraufhin sollte in etwa folgende Terminalausgabe angezeigt werden:
$:/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
- Zeigen Sie die neuesten Nachrichten an, die an den Stream gesendet wurden, um die neuesten Nachrichten anzuzeigen, die an den Stream gesendet wurden, um zu prüfen, ob die Produktion erfolgreich war.
Nachrichten konsumieren
- Stellen Sie zunächst sicher, dass der Stream, aus dem Sie Nachrichten konsumieren möchten, Nachrichten enthält. Sie können eine Testnachricht mit der Konsole erstellen oder den Stream und die Nachrichten verwenden, die wir in diesem Schnellstart erstellt haben.
- Öffnen Sie Ihren bevorzugten Editor, wie Visual Studio Code, im Verzeichnis
wd
. Dieoci-sdk
-Packages für TypeScript sollten bereits in diesem Verzeichnis installiert sein, nachdem Sie die Schritte unter Voraussetzungen ausgeführt haben. -
Erstellen Sie eine Datei namens
Consumer.ts
im Verzeichniswd
mit dem folgenden Code. Ersetzen Sie die Werte der VariablenociConfigFile
,ociProfileName
,ociStreamOcid
undociMessageEndpointForStream
im folgenden Code-Snippet durch die Werte für Ihren Mandanten.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); });
-
Führen Sie vom Terminal im Verzeichnis
wd
den folgenden Befehl aus, umConsumer.ts
zu kompilieren undConsumer.js
zu generieren:tsc Consumer.ts
-
Führen Sie im Verzeichnis
wd
den folgenden Befehl aus:node run Consumer.js
-
Meldungen wie die Folgenden sollten angezeigt werden:
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.
Hinweis
Wenn Sie die Konsole zum Erzeugen einer Testnachricht verwendet haben, lautet der Schlüssel für jede NachrichtNull
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Ressourcen:
- OCI-SDK für TypeScript auf GitHub
- Beispiele für OCI-SDK für TypeScript