Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Crea y administra temas Lite

En esta página, se explica cómo crear, ver y borrar temas de Lite.

Los temas de Lite son recursos zonales en los que puedes publicar mensajes. Cuando creas un tema de Lite, debes especificar una zona en la que almacenar los mensajes.

Después de crear un tema de Lite, puedes publicar mensajes en el tema de Lite, crear una suscripción de Lite al tema de Lite y recibir mensajes de la suscripción a Lite.

Crea temas de Lite

Cuando creas un tema de Lite, debes configurar su capacidad de procesamiento y almacenamiento. La cantidad y la capacidad de las particiones determinan la capacidad de un tema de Lite.

Los temas de Lite tienen las siguientes propiedades:

  • Cantidad de particiones: La cantidad de particiones en el tema de Lite.
  • Almacenamiento por partición: La cantidad de almacenamiento, en bytes, para cada partición. Puedes especificar entre 30 GiB-10 TiB de almacenamiento.
  • Capacidad de procesamiento de la publicación: La capacidad de procesamiento máxima de publicación de cada partición. Puedes especificar de 4 a 16 MiB por segundo de capacidad de capacidad de procesamiento, y el valor debe ser un número entero. Para obtener mejores resultados, crea un tema de Lite con la capacidad de procesamiento mínima de publicación. Si el tráfico aumenta, actualiza el tema de Lite y aumenta la capacidad de procesamiento de la publicación.
  • Suscripción a la capacidad de procesamiento: la capacidad de procesamiento máxima de suscripción de cada partición. Puedes especificar de 4 a 32 MiB por segundo de capacidad de capacidad de procesamiento, y el valor debe ser un número entero.
  • Período de retención de mensajes: la cantidad máxima de tiempo que un tema de Lite almacena mensajes. Si no especificas un período de retención de mensajes, el tema de Lite almacenará los mensajes hasta que excedas la capacidad de almacenamiento.

Puedes crear temas de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en Crear tema de Lite.

  3. Selecciona una región y una zona en la región.

  4. En la sección Nombre, ingresa un ID de tema de Lite. El nombre del tema de Lite incluye el ID del tema de Lite, la zona y el número del proyecto.

  5. En la sección Capacidad de procesamiento, ingresa la cantidad de particiones que se aprovisionarán para la partición.

  6. En la sección Message storage, ingresa el Storage per partition.

  7. Opcional: En la sección Message retention, selecciona Drop messages after the specified duration even if storage is available y, luego, ingresa el período de retención.

  8. Haga clic en Crear.

gcloud

Para crear un tema de Lite, usa el comando gcloud pubsub lite-topics create:

gcloud pubsub lite-topics create TOPIC_ID \
  --zone=ZONE \
  --partitions=NUMBER_OF_PARTITIONS \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  [--message-retention-period=MESSAGE_RETENTION_PERIOD]

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: Es el nombre de una zona compatible con Pub/Sub Lite

  • NUMBER_OF_PARTITIONS: un número entero para la cantidad de particiones en el tema de Lite

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud es exitosa, la línea de comandos muestra una confirmación:

Created [TOPIC_ID].

Protocolo

Para crear un tema de Lite, envía una solicitud POST como la siguiente:

POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

Reemplaza lo siguiente:

  • NUMBER_OF_PARTITIONS: un número entero para la cantidad de particiones en el tema de Lite

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig;
import com.google.cloud.pubsublite.proto.Topic.RetentionConfig;
import com.google.protobuf.util.Durations;

public class CreateTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");
    int partitions = 1;

    createTopicExample(cloudRegion, zoneId, projectNumber, topicId, partitions);
  }

  public static void createTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId, int partitions)
      throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set throughput capacity per partition in MiB/s.
                    .setCapacity(
                        PartitionConfig.Capacity.newBuilder()
                            // Must be 4-16 MiB/s.
                            .setPublishMibPerSec(4)
                            // Must be 4-32 MiB/s.
                            .setSubscribeMibPerSec(8)
                            .build())
                    .setCount(partitions))
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // How long messages are retained.
                    .setPeriod(Durations.fromDays(1))
                    // Set storage per partition to 30 GiB. This must be 30 GiB-10 TiB.
                    // If the number of bytes stored in any of the topic's partitions grows
                    // beyond this value, older messages will be dropped to make room for
                    // newer ones, regardless of the value of `period`.
                    .setPerPartitionBytes(30 * 1024 * 1024 * 1024L))
            .setName(topicPath.toString())
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic response = adminClient.createTopic(topic).get();
      System.out.println(response.getAllFields() + "created successfully.");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import AlreadyExists
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath
from google.protobuf.duration_pb2 import Duration

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"
# num_partitions = 1

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # A topic must have at least one partition.
        count=num_partitions,
        # Set throughput capacity per partition in MiB/s.
        capacity=Topic.PartitionConfig.Capacity(
            # Set publish throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 16.
            publish_mib_per_sec=4,
            # Set subscribe throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 32.
            subscribe_mib_per_sec=8,
        ),
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 30 GiB. This must be in the range 30 GiB-10TiB.
        # If the number of byptes stored in any of the topic's partitions grows beyond
        # this value, older messages will be dropped to make room for newer ones,
        # regardless of the value of `period`.
        per_partition_bytes=30 * 1024 * 1024 * 1024,
        # Allow messages to be retained for 7 days.
        period=Duration(seconds=60 * 60 * 24 * 7),
    ),
)

client = AdminClient(cloud_region)
try:
    response = client.create_topic(topic)
    print(f"{response.name} created successfully.")
except AlreadyExists:
    print(f"{topic_path} already exists.")

Para obtener una lista de las zonas disponibles, consulta Ubicaciones de Pub/Sub Lite.

Después de crear el tema de Lite, no puedes actualizar la cantidad de particiones, pero puedes escalar la capacidad de procesamiento y capacidad de almacenamiento. Para obtener más detalles, consulta Capacidad de escalamiento.

Aprovisiona capacidad

Los temas de Lite consisten en particiones. Una partición admite la siguiente capacidad:

  • Capacidad de procesamiento de publicación: La tasa total máxima a la que puedes publicar mensajes.
  • Capacidad de procesamiento de suscripción: la tasa total máxima a la que los mensajes se reenvían a las suscripciones de Lite.
  • Almacenamiento: el tamaño total máximo de los mensajes en la partición.

Si excedes la capacidad de almacenamiento, el servicio de Pub/Sub Lite quita el mensaje más antiguo de la partición, sin importar el período de retención de mensajes del mensaje más antiguo. El servicio de Pub/Sub Lite quita los mensajes con base en el mejor esfuerzo.

Actualiza temas de Lite

Puedes actualizar el período de retención de mensajes y escalar la capacidad de un tema de Lite. No puedes actualizar la cantidad de particiones o la zona. Para escalar la capacidad de un tema de Lite, consulta Capacidad de escalamiento.

Puedes actualizar un tema de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

  3. Haz clic en Editar.

  4. Ingresa el Almacenamiento por partición y el Período de retención.

  5. Selecciona una capacidad de procesamiento de publicación.

  6. Selecciona una capacidad de procesamiento de suscripción.

  7. Ingresa el Almacenamiento por partición.

gcloud

Para actualizar un tema de Lite, usa el comando gcloud pubsub lite-topics update:

gcloud pubsub lite-topics update TOPIC_ID \
  --zone=ZONE \
  --per-partition-publish-mib=PUBLISHING_CAPACITY \
  --per-partition-subscribe-mib=SUBSCRIBING_CAPACITY \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  --message-retention-period=MESSAGE_RETENTION_PERIOD

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud es exitosa, la línea de comandos muestra el tema de Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocolo

Para actualizar un tema de Lite, envía una solicitud PATCH como la siguiente:

PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID?updateMask=partitionConfig.capacity,retentionConfig.perPartitionBytes,retentionConfig.period
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "partitionConfig": {
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Reemplaza lo siguiente:

  • PUBLISHING_CAPACITY: un número entero para la capacidad de procesamiento de publicación de cada partición

  • SUBSCRIBING_CAPACITY: un número entero para la capacidad de procesamiento de la suscripción de cada partición

  • STORAGE_PER_PARTITION: la cantidad de almacenamiento para cada partición, como 30GiB

  • MESSAGE_RETENTION_PERIOD: la cantidad de tiempo que el tema de Lite almacena mensajes, como 1d o 2w

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig;
import com.google.cloud.pubsublite.proto.Topic.RetentionConfig;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.Durations;
import java.util.Arrays;

public class UpdateTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    updateTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void updateTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Iterable<String> iterablePaths =
        Arrays.asList(
            "partition_config.scale",
            "retention_config.per_partition_bytes",
            "retention_config.period");

    FieldMask fieldMask = FieldMask.newBuilder().addAllPaths(iterablePaths).build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set publishing throughput to 4 times the standard partition
                    // throughput of 4 MiB per sec. This must be in the range [1,4]. A
                    // topic with `scale` of 2 and count of 10 is charged for 20 partitions.
                    .setScale(4)
                    .build())
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // Set storage per partition to 200 GiB. This must be 30 GiB-10 TiB.
                    // If the number of bytes stored in any of the topic's partitions grows
                    // beyond this value, older messages will be dropped to make room for
                    // newer ones, regardless of the value of `period`.
                    // Be careful when decreasing storage per partition as it may cause
                    // lost messages.
                    .setPerPartitionBytes(200 * 1024 * 1024 * 1024L)
                    .setPeriod(Durations.fromDays(7)))
            .setName(topicPath.toString())
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic topicBeforeUpdate = adminClient.getTopic(topicPath).get();
      System.out.println("Before update: " + topicBeforeUpdate.getAllFields());

      Topic topicAfterUpdate = adminClient.updateTopic(topic, fieldMask).get();
      System.out.println("After update: " + topicAfterUpdate.getAllFields());
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath
from google.protobuf.duration_pb2 import Duration
from google.protobuf.field_mask_pb2 import FieldMask

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

# Defines which topic fields to update.
field_mask = FieldMask(
    paths=[
        "partition_config.scale",
        "retention_config.per_partition_bytes",
        "retention_config.period",
    ]
)

# Defines how to update the topic fields.
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # Set publishing throughput to 2x standard partition throughput of 4 MiB
        # per second. This must in the range [1,4]. A topic with `scale` of 2 and
        # `count` of 10 is charged for 20 partitions.
        scale=2,
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 100 GiB. This must be in the range 30 GiB-10TiB.
        # If the number of byptes stored in any of the topic's partitions grows beyond
        # this value, older messages will be dropped to make room for newer ones,
        # regardless of the value of `period`.
        # Be careful when decreasing storage per partition as it may cuase lost messages.
        per_partition_bytes=100 * 1024 * 1024 * 1024,
        # Allow messages to be stored for 14 days.
        period=Duration(seconds=60 * 60 * 24 * 14),
    ),
)

client = AdminClient(cloud_region)
try:
    response = client.update_topic(topic, field_mask)
    print(f"{response.name} updated successfully.")
except NotFound:
    print(f"{topic_path} not found.")

Capacidad de escalamiento

Puedes aumentar la capacidad de procesamiento de un tema de Lite con escalamiento vertical. El servicio Lite de Pub/Sub aprovisiona la misma capacidad de procesamiento para cada partición en el tema de Lite. Por ejemplo, si aumentas la capacidad de procesamiento de la publicación a 10 MiB por segundo, cada una de las particiones obtiene 10 MiB por segundo de capacidad de procesamiento de publicación.

También puedes aumentar o disminuir la cantidad de almacenamiento de un tema de Lite. El tema de Lite aprovisiona la misma cantidad de almacenamiento para cada partición. Si aumentas el almacenamiento a 60 GiB, cada una de las particiones obtiene 60 GiB de almacenamiento.

Si disminuyes la cantidad de almacenamiento en un tema de Lite, el servicio de Pub/Sub Lite primero quitará los mensajes más antiguos.

Obtén detalles del tema de Lite

Puedes obtener detalles sobre un tema de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

gcloud

Para obtener detalles sobre un tema de Lite, usa el comando gcloud pubsub lite-topics describe:

gcloud pubsub lite-topics describe TOPIC_ID \
--zone=ZONE

Reemplaza lo siguiente:

  • TOPIC_ID: el ID del tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

Si la solicitud es exitosa, la línea de comandos muestra el tema de Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocolo

Para obtener detalles sobre un tema de Lite, envía una solicitud GET como la siguiente:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

Si la solicitud se realiza correctamente, la respuesta es el tema de Lite en formato JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;

public class GetTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    getTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void getTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic topic = adminClient.getTopic(topicPath).get();
      long numPartitions = adminClient.getTopicPartitionCount(topicPath).get();
      System.out.println(topic.getAllFields() + "\nhas " + numPartitions + " partition(s).");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

client = AdminClient(cloud_region)
try:
    response = client.get_topic(topic_path)
    num_partitions = client.get_topic_partition_count(topic_path)
    print(f"{response.name} has {num_partitions} partition(s).")
except NotFound:
    print(f"{topic_path} not found.")

Enumera temas de Lite

Puedes enumerar los temas de Lite en un proyecto con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

Para ver una lista de los temas de Lite de un proyecto, ve a la página Temas de Lite.

gcloud

Para enumerar los temas de Lite en un proyecto, usa el comando gcloud pubsub lite-topics list:

gcloud pubsub lite-topics list \
  --zone=ZONE

Reemplaza ZONE por el nombre de la zona en la que se encuentra el tema de Lite.

Si la solicitud se realiza correctamente, la línea de comandos muestra los temas de Lite:

---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND
---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND

Protocolo

Para enumerar los temas de Lite en un proyecto, envía una solicitud GET como la siguiente:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/topics
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

Si la solicitud se realiza correctamente, la respuesta es una lista de temas de Lite en formato JSON:

{
  "topics": [
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID",
      },
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID",
      }
  ]
}

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.LocationPath;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.proto.Topic;
import java.util.List;

public class ListTopicsExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    long projectNumber = Long.parseLong("123456789");

    listTopicsExample(cloudRegion, zoneId, projectNumber);
  }

  public static void listTopicsExample(String cloudRegion, char zoneId, long projectNumber)
      throws Exception {

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    LocationPath locationPath =
        LocationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      List<Topic> topics = adminClient.listTopics(locationPath).get();
      for (Topic topic : topics) {
        System.out.println(topic.getAllFields());
      }
      System.out.println(topics.size() + " topic(s) listed.");
    }
  }
}

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, LocationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
location_path = LocationPath(project_number, location)

client = AdminClient(cloud_region)
response = client.list_topics(location_path)

for topic in response:
    print(topic)

print(f"{len(response)} topic(s) listed in your project and location.")

Borra temas de Lite

Puedes borrar temas de Lite con Cloud Console, la herramienta de línea de comandos de gcloud o la API de Pub/Sub Lite.

Console

  1. En Cloud Console, ve a la página Temas de Lite.

    Ir a la página Temas Lite

  2. Haz clic en el ID del tema de Lite.

  3. En la página Detalles del tema Lite, haz clic en Borrar.

  4. En el campo que aparece, ingresa delete para confirmar que deseas borrar el tema de Lite.

  5. Haz clic en Borrar.

gcloud

Para borrar un tema de Lite, usa el comando gcloud pubsub lite-topics delete:

  1. Ejecuta el comando delete:

    gcloud pubsub lite-topics delete TOPIC_ID \
     --zone=ZONE
    

    Reemplaza lo siguiente:

    • TOPIC_ID: el ID del tema de Lite

    • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  2. Para confirmar, ingresa Y.

Si la solicitud es correcta, la respuesta es la siguiente:

Deleted topic [TOPIC_ID].

Protocolo

Para borrar un tema Lite, envía una solicitud DELETE como la siguiente:

DELETE https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Reemplaza lo siguiente:

  • REGION: la región de la zona en la que se encuentra el tema de Lite

  • PROJECT_NUMBER: el número del proyecto con el tema de Lite

  • ZONE: el nombre de la zona en la que se encuentra el tema de Lite

  • TOPIC_ID: el ID del tema de Lite

Si la solicitud es correcta, la respuesta es un objeto JSON vacío.

Java

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Java en las bibliotecas cliente de Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;

public class DeleteTopicExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    deleteTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void deleteTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      adminClient.deleteTopic(topicPath).get();
      System.out.println(topicPath.toString() + " deleted successfully.");
    }
  }

Python

Antes de ejecutar esta muestra, sigue las instrucciones de configuración de Python en las bibliotecas cliente de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

client = AdminClient(cloud_region)
try:
    client.delete_topic(topic_path)
    print(f"{topic_path} deleted successfully.")
except NotFound:
    print(f"{topic_path} not found.")

Si borras un tema de Lite, no podrás publicar mensajes en él. Las suscripciones Lite al tema de Lite aún existen, pero no puedes recibir mensajes de ellas.