Crie um tópico

No Pub/Sub, um tópico é um recurso com nome que representa um feed de mensagens. Tem de criar um tópico antes de poder publicar ou subscrever o mesmo. O Pub/Sub suporta dois tipos de tópicos: um tópico padrão e um tópico de importação.

Este documento descreve como criar um tópico padrão do Pub/Sub. Se quiser saber mais sobre um tópico de importação e como criar um, consulte o artigo Acerca dos tópicos de importação.

Para criar um tópico, pode usar a Google Cloud consola, a Google Cloud CLI, a biblioteca cliente ou a API Pub/Sub.

Antes de começar

Funções e autorizações necessárias

Para receber as autorizações de que precisa para criar um tópico, peça ao seu administrador para lhe conceder a função IAM de editor do Pub/Sub(roles/pubsub.editor) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para criar um tópico. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para criar um tópico:

  • Conceda esta autorização para criar um tópico no projeto: pubsub.topics.create

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Pode configurar o controlo de acesso ao nível do projeto e ao nível do recurso individual. Pode criar uma subscrição num projeto e anexá-la a um tópico localizado num projeto diferente. Certifique-se de que tem as autorizações necessárias para cada projeto.

Propriedades de um tópico

Quando cria ou atualiza um tópico, tem de especificar as respetivas propriedades.

Adicione uma subscrição predefinida

Adiciona uma subscrição predefinida ao tópico Pub/Sub. Pode criar outra subscrição para o tópico depois de o criar. A subscrição predefinida tem as seguintes propriedades:

  • ID da subscrição de -sub
  • Tipo de fornecimento de extração
  • Duração da retenção de mensagens de sete dias
  • Expiração após 31 dias de inatividade
  • Prazo de confirmação de 10 segundos
  • Política de repetição imediata

Use um esquema

Um esquema é um formato que o campo de dados da mensagem tem de seguir. Um esquema é um contrato entre o publicador e o subscritor que o Pub/Sub aplica. Os esquemas de tópicos ajudam a padronizar os tipos de mensagens e as autorizações para permitir que sejam consumidos por diferentes equipas na sua organização. O Pub/Sub cria uma autoridade central para tipos de mensagens e autorizações. Para criar um tópico com esquema, consulte a Vista geral do esquema.

Ative o carregamento

A ativação desta propriedade permite-lhe carregar dados de streaming de origens externas para um tópico, para que possa usar as funcionalidades do Google Cloud. Para criar um tópico de importação para carregamento, consulte o seguinte:

Ative a retenção de mensagens

Especifica durante quanto tempo o tópico Pub/Sub retém as mensagens após a publicação. Após o período de retenção de mensagens, o Pub/Sub pode rejeitar a mensagem, independentemente do respetivo estado de confirmação. As taxas de armazenamento de mensagens são cobradas pelo armazenamento de todas as mensagens publicadas no tópico

  • Predefinição = Não ativado
  • Valor mínimo = 10 minutos
  • Valor máximo = 31 dias

Exporte dados de mensagens para o BigQuery

A ativação desta propriedade permite-lhe criar uma subscrição do BigQuery que escreve mensagens numa tabela do BigQuery existente à medida que são recebidas. Não precisa de configurar um cliente subscritor separado. Para mais informações acerca das subscrições do BigQuery, consulte o artigo Subscrições do BigQuery.

Faça uma cópia de segurança dos dados das mensagens no Cloud Storage

A ativação desta propriedade permite-lhe criar uma subscrição do Cloud Storage que escreve mensagens numa tabela do Cloud Storage existente à medida que são recebidas. Não precisa de configurar um cliente subscritor separado. Para mais informações sobre as subscrições do Cloud Storage, consulte o artigo Subscrições do Cloud Storage.

Transformações

As SMTs de tópicos permitem modificações simples aos dados e atributos das mensagens diretamente no Pub/Sub. Esta funcionalidade permite a limpeza, a filtragem ou a conversão de formato de dados antes de as mensagens serem publicadas no tópico.

Para mais informações sobre os SMTs, consulte a vista geral dos SMTs.

Google-owned and Google-managed encryption key

Especifica que o tópico está encriptado através de Google-owned and Google-managed encryption keys. O Pub/Sub encripta as mensagens com o algoritmo AES-256 por predefinição, pelo que a escolha desta opção mantém o comportamento predefinido. Google-owned and Google-managed encryption keys A Google processa a gestão e a rotação de chaves automaticamente, garantindo que as suas mensagens estão sempre protegidas com a encriptação mais forte disponível. Esta opção não requer mais nenhuma configuração. Para mais informações sobre a Google-owned and Google-managed encryption keys, consulte o artigo Encriptação predefinida com o Google-owned and Google-managed encryption keys.

Chave do Cloud KMS

Especifica se o tópico está encriptado com uma chave de encriptação gerida pelo cliente (CMEK). Por predefinição, o Pub/Sub encripta as mensagens com o Google-owned and Google-managed encryption keys . Se especificar esta opção, o Pub/Sub usa o padrão de encriptação de envelope com a CMEK. Nesta abordagem, o Cloud KMS não encripta as mensagens. Em alternativa, o Cloud KMS encripta as chaves de encriptação de dados (DEKs) que o Pub/Sub cria para cada tópico. O Pub/Sub encripta as mensagens através da DEK mais recente gerada para o tópico. O Pub/Sub desencripta as mensagens pouco antes de serem entregues aos subscritores. Para mais informações sobre como criar uma chave, consulte o artigo Configure a encriptação de mensagens.

Crie um tópico

Crie um tópico antes de o poder publicar ou subscrever.

Consola

Para criar um tópico, siga estes passos:

  1. Na Google Cloud consola, aceda à página Criar tópico do Pub/Sub.

    Aceda a Criar tópico

  2. No campo ID do tópico, introduza um ID para o seu tópico. Para mais informações sobre a atribuição de nomes a tópicos, consulte as diretrizes de nomenclatura.

  3. Mantenha a opção Adicionar uma subscrição predefinida.

  4. Opcional. Não selecione as outras opções.

  5. Clique em Criar tópico.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para criar um tópico, execute o comando gcloud pubsub topics create:

    gcloud pubsub topics create TOPIC_ID
  3. REST

    Para criar um tópico, use o método projects.topics.create:

    O pedido tem de ser autenticado com um token de acesso no cabeçalho Authorization. Para obter uma chave de acesso para as Credenciais padrão da aplicação atuais: gcloud auth application-default print-access-token.

    PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
    Authorization: Bearer ACCESS_TOKEN
    

    Onde:

    • PROJECT_ID é o ID do seu projeto.
    • TOPIC_ID é o ID do seu tópico.

    Resposta:

    {
    "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }

    C++

    Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::TopicAdminClient client, std::string project_id,
       std::string topic_id) {
      auto topic = client.CreateTopic(
          pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
      // Note that kAlreadyExists is a possible error when the library retries.
      if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
        std::cout << "The topic already exists\n";
        return;
      }
      if (!topic) throw std::move(topic).status();
    
      std::cout << "The topic was successfully created: " << topic->DebugString()
                << "\n";
    }

    C#

    Antes de experimentar este exemplo, siga as instruções de configuração do C# em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C# do Pub/Sub.

    
    using Google.Cloud.PubSub.V1;
    using Grpc.Core;
    using System;
    
    public class CreateTopicSample
    {
        public Topic CreateTopic(string projectId, string topicId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            var topicName = TopicName.FromProjectTopic(projectId, topicId);
            Topic topic = null;
    
            try
            {
                topic = publisher.CreateTopic(topicName);
                Console.WriteLine($"Topic {topic.Name} created.");
            }
            catch (RpcException e) when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                Console.WriteLine($"Topic {topicName} already exists.");
            }
            return topic;
        }
    }

    Ir

    O exemplo seguinte usa a versão principal da biblioteca de cliente Go Pub/Sub (v2). Se ainda estiver a usar a biblioteca v1, consulte o guia de migração para a v2. Para ver uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.

    Antes de experimentar este exemplo, siga as instruções de configuração do Go em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Pub/Sub.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    )
    
    func create(w io.Writer, projectID, topicID string) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	topic := &pubsubpb.Topic{
    		Name: fmt.Sprintf("projects/%s/topics/%s", projectID, topicID),
    	}
    	t, err := client.TopicAdminClient.CreateTopic(ctx, topic)
    	if err != nil {
    		return fmt.Errorf("CreateTopic: %w", err)
    	}
    	fmt.Fprintf(w, "Topic created: %v\n", t)
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.

    
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.Topic;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class CreateTopicExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
    
        createTopicExample(projectId, topicId);
      }
    
      public static void createTopicExample(String projectId, String topicId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          TopicName topicName = TopicName.of(projectId, topicId);
          Topic topic = topicAdminClient.createTopic(topicName);
          System.out.println("Created topic: " + topic.getName());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic(topicNameOrId) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    Node.ts

    Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    import {PubSub} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic(topicNameOrId: string) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    PHP

    Antes de experimentar este exemplo, siga as instruções de configuração do PHP no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PHP Pub/Sub.

    use Google\Cloud\PubSub\PubSubClient;
    
    /**
     * Creates a Pub/Sub topic.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     */
    function create_topic($projectId, $topicName)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->createTopic($topicName);
    
        printf('Topic created: %s' . PHP_EOL, $topic->name());
    }

    Python

    Antes de experimentar este exemplo, siga as instruções de configuração do Python em Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Pub/Sub.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    
    topic = publisher.create_topic(request={"name": topic_path})
    
    print(f"Created topic: {topic.name}")

    Ruby

    O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.

    Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.

    # topic_id = "your-topic-id"
    
    pubsub = Google::Cloud::PubSub.new
    topic_admin = pubsub.topic_admin
    
    topic = topic_admin.create_topic name: pubsub.topic_path(topic_id)
    
    puts "Topic #{topic.name} created."

Restrições de políticas da organização

As políticas organizacionais podem restringir a criação de tópicos. Por exemplo, uma política pode restringir o armazenamento de mensagens numa região do Compute Engine. Para evitar erros de criação de tópicos, examine e atualize as políticas organizacionais, conforme necessário, antes de criar um tópico.

Se o seu projeto foi criado recentemente, aguarde alguns minutos para que a política da organização seja inicializada antes de criar um tópico.

Aceda às políticas da organização

Para mais informações, consulte o artigo Configure políticas de armazenamento de mensagens.

O que se segue?

Apache Kafka® é uma marca comercial registada da The Apache Software Foundation ou das respetivas afiliadas nos Estados Unidos e/ou noutros países.