SDK para Início Rápido de Streaming do Go
Publique e consuma mensagens no serviço Streaming usando o OCI SDK for Go.
Esse início rápido mostra como usar o OCI (Oracle Cloud Infrastructure) SDK for Go 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 Go, 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 o arquivo de configuração do SDK.
- 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.
- Go instalado localmente. Siga estas instruções, se necessário. Certifique-se de que
go
esteja em seuPATH
. -
Visual Studio Code (recomendado) ou qualquer outro ambiente de desenvolvimento integrado (IDE) ou editor de texto.
- 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 de trabalho vazio
wd
. - Crie um arquivo chamado
Producer.go
neste diretório. -
Adicione o código a seguir a
Producer.go
. Substitua os valores das variáveisociConfigFilePath
,ociProfileName
,ociStreamOcid
eociMessageEndpoint
no trecho de código a seguir pelos valores aplicáveis à sua tenancy.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) } }
- Salve
Producer.go
. -
Abra o terminal e
cd
no diretóriowd
, e execute os seguintes comandos, em ordem:-
Esse comando cria o arquivo
go.mod
no diretóriowd
:go mod init oss_producer_example/v0
-
Esse comando instala o OCI SDK for Go e para o serviço Streaming:
go mod tidy
-
Esse comando executa o exemplo:
go run Producer.go
-
- 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.
-
Adicione o código a seguir a
Consumer.go
. Substitua os valores das variáveisociConfigFilePath
,ociProfileName
,ociStreamOcid
eociMessageEndpoint
no trecho de código a seguir pelos valores aplicáveis à sua tenancy.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 } }
- Salve
Consumer.go
. -
Abra o terminal e
cd
no diretóriowd
, e execute os seguintes comandos, em ordem:-
Esse comando cria o arquivo
go.mod
no diretóriowd
:go mod init oss_consumer_example/v0
-
Esse comando instala o OCI SDK for Go e para o serviço Streaming:
go mod tidy
-
Esse comando executa o exemplo:
go run Consumer.go
-
-
Você deverá ver mensagens semelhantes a esta:
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
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: