Service de diffusion en continu et trousse SDK pour Go - Démarrage rapide

Publier et consommer des messages dans le service de diffusion en continu à l'aide de la trousse SDK OCI pour Go.

Ce démarrage rapide vous montre comment utiliser la trousse SDK pour Go pour Oracle Cloud Infrastructure (OCI) et le service de diffusion en continu pour Oracle Cloud Infrastructure pour publier et consommer des messages.

Pour les concepts clés et plus de détails sur le service de diffusion en continu, voir Aperçu du service de diffusion en continu. Pour plus d'informations sur l'utilisation des trousses SDK pour OCI, consultez les guides sur les SDK.

Préalables

  1. Pour utiliser la trousse SDK pour Go, vous devez disposer des éléments suivants :

    • Un compte Oracle Cloud Infrastructure
    • Utilisateur créé dans ce compte, dans un groupe avec une politique qui accorde les autorisations requises. Il peut s'agir d'un utilisateur pour vous-même, une autre personne ou un autre système qui doit appeler l'API. Pour des exemples sur la configuration d'un nouvel utilisateur, d'un groupe, d'un compartiment et d'une politique, voir Ajout d'utilisateurs. Pour obtenir la liste des politiques types que vous pouvez utiliser, voir Politiques communes.
    • Une paire de clés utilisée pour signer des demandes d'API, avec la clé publique chargée dans Oracle. Seul l'utilisateur appelant l'API doit disposer de la clé privée. Pour plus d'informations, voir Fichier de configuration de trousse SDK.
  2. Collectez le point d'extrémité et l'OCID des messages d'un flux. Pour les étapes d'obtention des détails d'un flux, voir Obtention des détails d'un flux. Aux fins de ce démarrage rapide, le flux doit utiliser un point d'extrémité public et laisser Oracle gérer le chiffrement. Reportez-vous aux sections Création d'un flux et Création d'un groupe de flux si vous n'avez pas de flux existant.
  3. Installer localement. Suivez ces instructions si nécessaire. Assurez-vous que go se trouve dans la variable d'environnement PATH.
  4. Visual Studio Code (recommandé) ou tout autre environnement de développement intégré (IDE) ou éditeur de texte.

  5. Assurez-vous de disposer d'un fichier de configuration de trousse SDK valide. Pour les environnements de production, vous devez utiliser l'autorisation du principal d'instance.

Production de messages

  1. Ouvrez votre éditeur favori, tel que Visual Studio Code, à partir du répertoire de travail vide wd.
  2. Créez un fichier nommé Producer.go dans ce répertoire.
  3. Ajoutez le code suivant au fichier Producer.go. Remplacez les valeurs des variables ociConfigFilePath, ociProfileName, ociStreamOcid et ociMessageEndpoint dans l'extrait de code suivant par les valeurs applicables à votre location.

    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)
    	}
    
    }
  4. Enregistrez le fichier Producer.go.
  5. Ouvrez le terminal et cd dans le répertoire wd, exécutez les commandes suivantes, dans l'ordre :

    1. Cette commande crée le fichier go.mod dans le répertoire wd :

      go mod init oss_producer_example/v0
    2. Cette commande installe la trousse SDK OCI pour Go et pour le service de diffusion en continu :

      go mod tidy
    3. Cette commande exécute l'exemple suivant :

      go run Producer.go
  6. Afficher les derniers messages envoyés au flux pour voir les derniers messages envoyés au flux pour vérifier que la production a réussi.

Consommation de messages

  1. Assurez-vous tout d'abord que le flux à partir duquel vous voulez consommer des messages contient des messages. Vous pouvez utiliser la console pour produire un message de test ou utiliser le flux et les messages que nous avons créés dans ce démarrage rapide.
  2. Ajoutez le code suivant au fichier Consumer.go. Remplacez les valeurs des variables ociConfigFilePath, ociProfileName, ociStreamOcid et ociMessageEndpoint dans l'extrait de code suivant par les valeurs applicables à votre location.

    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
    
    	}
    }
  3. Enregistrez Consumer.go.
  4. Ouvrez le terminal et cd dans le répertoire wd, exécutez les commandes suivantes, dans l'ordre :

    1. Cette commande crée le fichier go.mod dans le répertoire wd :

      go mod init oss_consumer_example/v0
    2. Cette commande installe la trousse SDK OCI pour Go et pour le service de diffusion en continu :

      go mod tidy
    3. Cette commande exécute l'exemple suivant :

      go run Consumer.go
  5. Des messages similaires aux suivants doivent s'afficher :

    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
    Note

    Si vous avez utilisé la console pour produire un message de test, la clé de chaque message est Null.