Cómo crear un tema

En Pub/Sub, un tema es un recurso con nombre que representa un feed de mensajes. Antes de poder publicar un tema o suscribirte a él, debes crearlo. Pub/Sub admite dos tipos de temas: un tema estándar y un tema de importación.

En este documento, se describe cómo crear un tema estándar de Pub/Sub. Si quieres obtener más información sobre un tema de importación y cómo crear uno, consulta Acerca de los temas de importación.

Para crear un tema, puedes usar la Google Cloud consola de , Google Cloud CLI, la biblioteca cliente o la API de Pub/Sub.

Antes de comenzar

Roles y permisos requeridos

Para obtener los permisos que necesitas para crear un tema, pídele a tu administrador que te otorgue el rol de IAM de editor de Pub/Sub(roles/pubsub.editor) en tu proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear un tema. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear un tema:

  • Otorga este permiso para crear un tema en el proyecto: pubsub.topics.create

También puedes obtener estos permisos con roles personalizados o otros roles predefinidos.

Puedes configurar el control de acceso a nivel de proyecto y a nivel de los recursos individuales. Puedes crear una suscripción en un proyecto y adjuntarla a un tema ubicado en un proyecto diferente. Asegúrate de tener los permisos necesarios para cada proyecto.

Propiedades de un tema

Cuando creas o actualizas un tema, debes especificar sus propiedades.

Agregar una suscripción predeterminada

Agrega una suscripción predeterminada al tema de Pub/Sub. Puedes crear otra suscripción para el tema después de que se cree. La suscripción predeterminada tiene las siguientes propiedades:

  • ID de suscripción de -sub
  • Tipo de entrega de extracción
  • Duración de retención de mensajes de siete días
  • Vencimiento después de 31 días de inactividad
  • Plazo límite de confirmación de 10 segundos
  • Política de reintento inmediato

Habilitar transferencia

Habilitar esta propiedad te permite transferir datos de transmisión desde fuentes externas a un tema para que puedas usar las funciones de Google Cloud. Para crear un tema de importación para la transferencia, consulta lo siguiente:

Habilitar la retención de mensajes por temas

De forma predeterminada, un tema de Pub/Sub descarta los mensajes en cuanto los reconocen todas las suscripciones adjuntas al tema. De forma opcional, puedes configurar un tema para que retenga los mensajes durante un período de hasta 31 días, con un período de retención mínimo de 10 minutos.

La retención de mensajes permite que las suscripciones vuelvan a reproducir mensajes confirmados anteriormente o mensajes que se publicaron antes de que crearas la suscripción. Para obtener más información, consulta Vuelve a reproducir y borra mensajes con seek.

Los costos de almacenamiento de los mensajes retenidos por tema se facturan en el proyecto del tema. Una vez que transcurre el período de retención de mensajes, Pub/Sub puede descartar el mensaje, sin importar el estado de confirmación.

Para ver las métricas sobre los mensajes retenidos, usa las siguientes métricas de Cloud Monitoring:

Exportar datos de mensajes a BigQuery

Habilitar esta propiedad te permite crear una suscripción a BigQuery que escribe mensajes en una tabla de BigQuery existente a medida que se reciben. No necesitas configurar un cliente suscriptor independiente. Para obtener más información sobre las suscripciones a BigQuery, consulta Suscripciones a BigQuery.

Crear copia de seguridad de los datos de mensajes en Cloud Storage

Habilitar esta propiedad te permite crear una suscripción a Cloud Storage que escribe mensajes en una tabla de Cloud Storage existente a medida que se reciben. No necesitas configurar un cliente suscriptor independiente. Para obtener más información sobre las suscripciones a Cloud Storage, consulta Suscripciones a Cloud Storage.

Transformaciones

Las SMT de temas permiten realizar modificaciones ligeras en los datos y atributos de los mensajes directamente en Pub/Sub. Esta función permite la limpieza de datos, el filtrado o la conversión de formato antes de que los mensajes se publiquen en el tema.

Para obtener más información sobre las SMT, consulta la descripción general de las SMT.

Google-owned and Google-managed encryption key

Especifica que el tema está encriptado con Google-owned and Google-managed encryption keys. De forma predeterminada, Pub/Sub encripta los mensajes con Google-owned and Google-managed encryption keys , por lo que elegir esta opción mantiene el comportamiento predeterminado. Google controla la administración y la rotación de claves de forma automática, lo que garantiza que tus mensajes siempre estén protegidos con la encriptación más sólida disponible. Esta opción no requiere ninguna configuración adicional. Para obtener más información sobre Google-owned and Google-managed encryption keys, consulta Encriptación predeterminada con Google-owned and Google-managed encryption keys.

Clave de Cloud KMS

Especifica si el tema está encriptado con una clave de encriptación administrada por el cliente (CMEK). De forma predeterminada, Pub/Sub encripta los mensajes con Google-owned and Google-managed encryption keys . Si especificas esta opción, Pub/Sub usa el patrón de encriptación de sobre con CMEK. En este enfoque, Cloud KMS no encripta los mensajes. En cambio, Cloud KMS encripta las claves de encriptación de datos (DEK) que Pub/Sub crea para cada tema. Pub/Sub encripta los mensajes con la DEK más nueva que se generó para el tema. Pub/Sub desencripta los mensajes poco antes de entregarlos a los suscriptores. Para obtener más información sobre cómo crear una clave, consulta Configura la encriptación de mensajes.

Crea un tema

Crea un tema antes de poder publicarlo o suscribirte a él.

Console

Para crear un tema, sigue estos pasos:

  1. En la Google Cloud consola de, ve a la página de Pub/Sub Crear tema.

    Ir a Crear tema

  2. En el campo ID de tema, ingresa un ID para tu tema. Para obtener más información sobre cómo nombrar temas, consulta los lineamientos para asignar nombres.

  3. Para crear una suscripción predeterminada para el tema, selecciona Agregar una suscripción predeterminada. Esta opción está habilitada de forma predeterminada.

  4. Es opcional. Para usar un esquema con el tema, haz clic en Usar un esquema y proporciona el esquema. Para obtener más información, consulta Crea y asocia un esquema cuando crees un tema.

  5. Para un tema estándar, deja Habilitar transferencia sin seleccionar.

  6. Es opcional. Para retener mensajes después de que se publiquen, selecciona Habilitar la retención de mensajes. Selecciona el período de retención en días, horas y minutos. Para obtener más información, consulta Habilitar la retención de mensajes.

  7. Es opcional. Para exportar mensajes publicados a una tabla de BigQuery, selecciona Exportar datos a BigQuery y, luego, ingresa los detalles de la tabla. Para obtener más información, consulta Crea suscripciones a BigQuery.

  8. Es opcional. Para crear una copia de seguridad de los mensajes publicados en un bucket de Cloud Storage, selecciona Crear copia de seguridad de los datos de mensajes en Cloud Storage y, luego, ingresa los detalles del bucket de Cloud Storage. Para obtener más información, consulta Crea suscripciones a Cloud Storage.

  9. Es opcional. En Transformaciones, agrega una o más transformaciones de mensaje único (SMT) para manipular y filtrar los datos de los mensajes. Para obtener más información, consulta Crea un tema con SMT.

  10. Es opcional. Para usar una clave de encriptación administrada por el cliente (CMEK) para encriptar mensajes, selecciona Clave de Cloud KMS. De forma predeterminada, Pub/Sub usa la encriptación predeterminada de Google, que no requiere una CMEK. Para obtener más información, consulta Configura la encriptación de mensajes.

  11. Es opcional. Para administrar las claves asociadas con el tema, haz clic en Administrar claves. Para obtener más información, consulta Descripción general de etiquetas.

  12. Haz clic en Crear un tema.

gcloud

Para crear un tema, ejecuta el gcloud pubsub topics create comando:

gcloud pubsub topics create TOPIC_ID

REST

Para crear un tema, usa el projects.topics.create método:

La solicitud debe autenticarse con un token de acceso en el encabezado Authorization. A fin de obtener un token de acceso para las credenciales predeterminadas actuales de la aplicación , usa el siguiente comando: gcloud auth application-default print-access-token.

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

Aquí:

  • PROJECT_ID es el ID del proyecto.
  • TOPIC_ID es el ID del tema.

Respuesta:

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

C++

Antes de probar esta muestra, sigue las instrucciones de configuración de C++ en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C++ .

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 probar esta muestra, sigue las instrucciones de configuración de C# en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para C#.


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;
    }
}

Go

En la siguiente muestra, se usa la versión principal de la biblioteca cliente de Pub/Sub de Go (v2). Si aún usas la biblioteca v1, consulta la guía de migración a la v2. Para ver una lista de ejemplos de código de la v1, consulta los ejemplos de código obsoletos.

Antes de probar esta muestra, sigue las instrucciones de configuración de Go en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Go.

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 probar esta muestra, sigue las instrucciones de configuración de Java en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Java .


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 probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.

/**
 * 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 probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Node.js.

/**
 * 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 probar esta muestra, sigue las instrucciones de configuración de PHP en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para PHP .

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 probar esta muestra, sigue las instrucciones de configuración de Python en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Python de 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

En la siguiente muestra, se usa la biblioteca cliente de Pub/Sub de Ruby v3. Si aún usas la biblioteca v2, consulta la guía de migración a la v3. Para ver una lista de ejemplos de código de la v2 de Ruby, consulta los ejemplos de código obsoletos.

Antes de probar esta muestra, sigue las instrucciones de configuración de Ruby en la guía de inicio rápido sobre el uso de bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de Pub/Sub para Ruby.

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

¿Qué sigue?

Apache Kafka® es una marca registrada de The Apache Software Foundation o sus afiliados de Estados Unidos y otros países.