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 Trusted 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

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 Trusted 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 Cloud-powered encryption key

Especifica que o tópico está encriptado através de Google Cloud-powered 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 Cloud-powered 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 Cloud-powered encryption keys, consulte o artigo Encriptação predefinida com o Google Cloud-powered 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 Cloud-powered 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 Trusted 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

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

gcloud pubsub topics create TOPIC_ID

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."

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.