SDK für Go mit Streaming verwenden - Schnellstart
Veröffentlichen und konsumieren Sie Nachrichten im Streaming-Service mit OCI SDK for Go.
In diesem Schnellstart wird gezeigt, wie Sie das Oracle Cloud Infrastructure-(OCI-)SDK für Go 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 Go 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 SDK-Konfigurationsdatei.
- 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.
- Go ist lokal installiert. Befolgen Sie gegebenenfalls diese Anweisungen. Stellen Sie sicher, dass sich
go
in IhremPATH
befindet. -
Visual Code Studio (empfohlen) oder eine andere Integrated Development Environment (IDE) bzw. ein Texteditor.
- 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 leeren Arbeitsverzeichnis
wd
. - Erstellen Sie in diesem Verzeichnis eine Datei namens
Producer.go
. -
Fügen Sie den folgenden Code zu
Producer.go
hinzu. Ersetzen Sie die Werte der VariablenociConfigFilePath
,ociProfileName
,ociStreamOcid
undociMessageEndpoint
im folgenden Code-Snippet durch die Werte für Ihren Mandanten.package main import ( "context" "fmt" "strconv" "github.com/oracle/oci-go-sdk/v36/common" "github.com/oracle/oci-go-sdk/v36/example/helpers" "github.com/oracle/oci-go-sdk/v36/streaming" ) const ociMessageEndpoint = "<stream_message_endpoint>" const ociStreamOcid = "<stream_OCID>" const ociConfigFilePath = "<config_file_path>" const ociProfileName = "<config_file_profile_name>" func main() { fmt.Println("Go oci oss sdk example producer") putMsgInStream(ociMessageEndpoint, ociStreamOcid) } func putMsgInStream(streamEndpoint string, streamOcid string) { fmt.Println("Stream endpoint for put msg api is: " + streamEndpoint) provider, err := common.ConfigurationProviderFromFileWithProfile(ociConfigFilePath, ociProfileName, "") helpers.FatalIfError(err) streamClient, err := streaming.NewStreamClientWithConfigurationProvider(provider, streamEndpoint) helpers.FatalIfError(err) // Create a request and dependent object(s). for i := 0; i < 5; i++ { putMsgReq := streaming.PutMessagesRequest{StreamId: common.String(streamOcid), PutMessagesDetails: streaming.PutMessagesDetails{ // we are batching 2 messages for each Put Request Messages: []streaming.PutMessagesDetailsEntry{ {Key: []byte("key dummy-0-" + strconv.Itoa(i)), Value: []byte("value dummy-" + strconv.Itoa(i))}, {Key: []byte("key dummy-1-" + strconv.Itoa(i)), Value: []byte("value dummy-" + strconv.Itoa(i))}}}, } // Send the request using the service client putMsgResp, err := streamClient.PutMessages(context.Background(), putMsgReq) helpers.FatalIfError(err) // Retrieve value from the response. fmt.Println(putMsgResp) } }
- Speichern Sie
Producer.go
. -
Öffnen Sie das Terminal, wechseln Sie mit
cd
zum Verzeichniswd
, und führen Sie die folgenden Befehle in der angegebenen Reihenfolge aus:-
Mit diesem Befehl wird die Datei
go.mod
im Verzeichniswd
erstellt:go mod init oss_producer_example/v0
-
Mit diesem Befehl wird das OCI-SDK für Go und für Streaming installiert:
go mod tidy
-
Dieser Befehl führt das Beispiel aus:
go run Producer.go
-
- 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.
-
Fügen Sie den folgenden Code zu
Consumer.go
hinzu. Ersetzen Sie die Werte der VariablenociConfigFilePath
,ociProfileName
,ociStreamOcid
undociMessageEndpoint
im folgenden Code-Snippet durch die Werte für Ihren Mandanten.package main import ( "context" "fmt" "github.com/oracle/oci-go-sdk/v36/common" "github.com/oracle/oci-go-sdk/v36/example/helpers" "github.com/oracle/oci-go-sdk/v36/streaming" ) const ociMessageEndpoint = "<stream_message_endpoint>" const ociStreamOcid = "<stream_OCID>" const ociConfigFilePath = "<config_file_path>" const ociProfileName = "<config_file_profile_name>" func main() { fmt.Println("Go oci oss sdk example for consumer") getMsgWithGroupCursor(ociMessageEndpoint, ociStreamOcid) } func getMsgWithGroupCursor(streamEndpoint string, streamOcid string) { client, err := streaming.NewStreamClientWithConfigurationProvider(common.DefaultConfigProvider(), streamEndpoint) helpers.FatalIfError(err) grpCursorCreateReq0 := streaming.CreateGroupCursorRequest{ StreamId: common.String(streamOcid), CreateGroupCursorDetails: streaming.CreateGroupCursorDetails{Type: streaming.CreateGroupCursorDetailsTypeTrimHorizon, CommitOnGet: common.Bool(true), GroupName: common.String("Go-groupname-0"), InstanceName: common.String("Go-groupname-0-instancename-0"), TimeoutInMs: common.Int(1000), }} // Send the request using the service client grpCursorResp0, err := client.CreateGroupCursor(context.Background(), grpCursorCreateReq0) helpers.FatalIfError(err) // Retrieve value from the response. fmt.Println(grpCursorResp0) simpleGetMsgLoop(client, streamOcid, *grpCursorResp0.Value) } func simpleGetMsgLoop(streamClient streaming.StreamClient, streamOcid string, cursorValue string) { for i := 0; i < 5; i++ { getMsgReq := streaming.GetMessagesRequest{Limit: common.Int(3), StreamId: common.String(streamOcid), Cursor: common.String(cursorValue)} // Send the request using the service client getMsgResp, err := streamClient.GetMessages(context.Background(), getMsgReq) helpers.FatalIfError(err) // Retrieve value from the response. if len(getMsgResp.Items) > 0 { fmt.Println("Key : " + string(getMsgResp.Items[0].Key) + ", value : " + string(getMsgResp.Items[0].Value) + ", Partition " + *getMsgResp.Items[0].Partition) } if len(getMsgResp.Items) > 1 { fmt.Println("Key : " + string(getMsgResp.Items[1].Key) + ", value : " + string(getMsgResp.Items[1].Value) + ", Partition " + *getMsgResp.Items[1].Partition) } cursorValue = *getMsgResp.OpcNextCursor } }
- Speichern Sie
Consumer.go
. -
Öffnen Sie das Terminal, wechseln Sie mit
cd
zum Verzeichniswd
, und führen Sie die folgenden Befehle in der angegebenen Reihenfolge aus:-
Mit diesem Befehl wird die Datei
go.mod
im Verzeichniswd
erstellt:go mod init oss_consumer_example/v0
-
Mit diesem Befehl wird das OCI-SDK für Go und für Streaming installiert:
go mod tidy
-
Dieser Befehl führt das Beispiel aus:
go run Consumer.go
-
-
Meldungen wie die Folgenden sollten angezeigt werden:
Go oci oss sdk example for consumer { RawResponse={200 OK 200 HTTP/1.1 1 1 map[Access-Control-Allow-Credentials:[true] ... } Key : , value : Example Test Message 0, Partition 0 Key : , value : Example Test Message 0, Partition 0 Key : , value : Example Test Message 0, Partition 0 Key : , value : Example Test Message 0, Partition 0 Key : , value : Example Test Message 0, Partition 0
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: