Crea y administra reservas de Lite

En este documento, se explica cómo usar y administrar las reservas de Pub/Sub Lite. En este documento, también se explica el concepto de unidades de capacidad y cómo determinar cuántas necesitas para adaptarse a la capacidad de procesamiento de tu aplicación.

Descripción general de las reservas de Lite

Las reservas de Lite aprovisionan y comparten de forma dinámica la capacidad de procesamiento entre uno o varios temas de Lite en una región. Estos temas pueden ser regionales o zonales de Lite. Usar las reservas de Lite es una mejor opción que configurar la capacidad de procesamiento de los temas individuales de Lite. Con las reservas de Lite, puedes administrar y supervisar menos recursos. Además, no tienes que elegir la capacidad de procesamiento de los temas de Lite individuales.

Para usar una reserva de Lite, debes adjuntar un tema de Lite que se encuentre en la misma región a la reserva de Lite específica. Puedes adjuntar una sola reserva de Lite a los temas de Lite zonales y regionales. Todas las particiones de un tema de Lite vinculado a una reserva Lite consumen de forma dinámica de la capacidad de procesamiento aprovisionada en la reserva Lite. Si especificas una reserva de Lite para un tema de Lite, también puedes incluir límites de frecuencia a fin de limitar la capacidad de procesamiento de cada partición del tema.

Descripción general de las unidades de capacidad

La capacidad de procesamiento de una reserva de Lite se aprovisiona en unidades de capacidad.

Una unidad de capacidad corresponde a la siguiente capacidad de procesamiento:

Tipo de tema Lite Capacidad de procesamiento de publicación en MiBs Capacidad de procesamiento de suscripción en MiBs
Zonal 1 2
Regional 0.25 0.5

Lineamientos para nombrar una reserva

Un nombre de recurso de Pub/Sub Lite identifica de forma única un recurso de Pub/Sub Lite, como un tema, una suscripción o una reserva. El nombre del recurso debe tener el siguiente formato:

projects/project-identifier/collection/ID

  • project-identifier: Debe ser el ID o número del proyecto, disponible en la consola de Google Cloud. Por ejemplo, my-cool-project es un ID del proyecto. 123456789123 es un número de proyecto.

  • collection: Debe ser topics, subscriptions o reservations.

  • ID: Debe cumplir con los siguientes lineamientos:

    • No debe comenzar con la cadena goog.
    • Comenzar con una letra
    • tener entre 3 y 255 caracteres
    • Contiene solo los siguientes caracteres: letras [A-Za-z], números [0-9], guiones -, guiones bajos _, puntos ., virgulillas ~, signos más + y signos de porcentaje %

    Puedes usar los caracteres especiales de la lista anterior en nombres de recursos sin codificación de URL. Sin embargo, debes asegurarte de que los demás caracteres especiales estén correctamente codificados o decodificados cuando los uses en las URLs. Por ejemplo, mi-tópico es un ID no válido. Sin embargo, mi-t%C3%B3pico es válido. Este formato es importante cuando realizas llamadas de REST.

Lineamientos para usar una reserva de Lite

El aprovisionamiento de la capacidad de procesamiento con reservas de Lite es obligatorio para los temas de Lite regionales y opcional para los temas de Lite zonales. Una reserva de Lite es un recurso regional.

Ten en cuenta lo siguiente cuando planeas configurar una reserva de Lite:

  • La cantidad de unidades de capacidad necesarias para una reserva de Lite debe ser igual a la capacidad de procesamiento máxima que esperas en un minuto determinado en todos los temas y suscripciones de esa reserva de Lite.

  • Cuando la capacidad de procesamiento combinada de todos los temas de una reserva de Lite alcanza su capacidad, la publicación y la entrega se limitan. Los servidores de Pub/Sub Lite dejan de enviar mensajes a los clientes, y los mensajes se almacenan en búfer en el cliente publicador. Puedes configurar una alerta para reservation/throughput_capacity/utilization que te informe cuando la reserva esté en peligro de limitarse a fin de que puedas aumentar su tamaño.

  • Puedes actualizar la capacidad de procesamiento de las reservas con la frecuencia que desees. Los cambios se aplicarán en menos de un minuto. Sin embargo, si disminuyes la capacidad de procesamiento de una reserva, se te seguirá cobrando el importe más alto por un período de 24 horas. Pub/Sub Lite es intrínsecamente un sistema de pago por capacidad, en el que los aumentos de escala son instantáneos y la reducción de la escala son posibles.

  • Todos los temas de Lite adjuntos a una reserva de Lite consumen el mismo grupo de capacidad de procesamiento. Por lo tanto, es posible que un tema de Lite use repentinamente una gran capacidad de procesamiento, lo que quitará otros temas de Lite y evitar que publiquen o reciban mensajes. Si necesitas aislamiento completo en temas Lite, puedes adjuntarlos a reservas independientes.

Impacto de las particiones en una reserva de Lite

La cantidad total de particiones en todos los temas de Lite en una reserva de Lite no debe ser mayor que la cantidad de unidades de capacidad reservadas. Por ejemplo, no puedes adjuntar una reserva de Lite de 10 unidades de capacidad a un tema de Lite ni un conjunto de temas de Lite cuyo número total de particiones sea mayor que 10.

Calcula las unidades de capacidad de una reserva de Lite

El tamaño de una reserva de Lite se define por la cantidad de unidades de capacidad. En los siguientes ejemplos, se muestra cómo estimar la capacidad necesaria para temas individuales de Lite.

  1. Determina la capacidad de procesamiento de publicación máxima.

    Calcula el máximo de capacidad de procesamiento de todos los temas de Lite adjuntos a la reserva de Lite. Una estimación aproximada de la capacidad de procesamiento es suficiente, ya que siempre puedes actualizar el tamaño de la reserva.

  2. Determinar la capacidad de procesamiento de suscripción máxima

    La capacidad de procesamiento de suscripción máxima se calcula de manera similar a la capacidad de procesamiento de publicación máxima. Sin embargo, ten en cuenta que no es necesario que tus suscriptores reciban mensajes con la frecuencia máxima de los publicadores. Si los retrasos en el procesamiento son aceptables, Pub/Sub Lite te permite almacenar en búfer los mensajes y procesarlos a un ritmo constante. Al mismo tiempo, es posible que desees tener más capacidad de suscripción que de publicación para adaptarse a los tiempos de inactividad ocasionales de los suscriptores.

  3. Determina la cantidad total de unidades de capacidad requeridas.

    En la tabla de la sección anterior, se especifica la cantidad de MiBps que una unidad de capacidad puede almacenar para diferentes operaciones. La siguiente es la fórmula para calcular las unidades de capacidad necesarias para una reserva de Lite de muestra:

    • Capacidad de procesamiento máxima de publicación de los temas Lite zonales = Pz MiBps
    • Capacidad de procesamiento máxima de publicación de los temas regionales Lite = Pr MiBps
    • Capacidad de procesamiento de suscripción máxima de los temas de Lite zonales = Sz MiBps
    • Capacidad de procesamiento de suscripción máxima de los temas regionales Lite = Sr MiBps

      Cantidad de unidades de capacidad requeridas = (Pz / 1 MiBps) + (Pr/0.25 MiBps) + (Sz/2 MiBps) + (Sr/0.5 MiBps)

      Si el número no es un número entero, debes redondear el valor hacia arriba.

Configura la capacidad de procesamiento sin una reserva de Lite

  • Capacidad de procesamiento de publicación de temas: Puedes especificar entre 4 y 16 MiBps de capacidad de procesamiento y el valor debe ser un número entero.

  • Capacidad de procesamiento de suscripción a temas: Puedes especificar entre 4 y 32 MiBps de capacidad de procesamiento y el valor debe ser un número entero.

Para la capacidad de procesamiento de suscripción, te recomendamos que aprovisiones tu capacidad de procesamiento de modo que sea igual al producto de la capacidad de procesamiento de publicación esperada y a la cantidad de suscripciones del tema.

La capacidad del publicador y el suscriptor aprovisionada para un tema individual no es intercambiable. Por este motivo, te recomendamos que siempre uses las reservas.

Existen diferencias en la facturación cuando se aprovisiona la capacidad directamente para los temas en lugar de usar las reservas. Consulta la página de precios de Pub/Sub Lite para obtener más detalles.

Crea una reserva de Lite

Una reserva de Lite debe estar en el mismo proyecto y la misma región que cualquier tema de Lite vinculado a ella. Para obtener una lista de las zonas y regiones disponibles, consulta Ubicaciones de Pub/Sub Lite.

Puedes crear una reserva de Lite con la consola de Google Cloud, Google Cloud CLI o la API Lite de Pub/Sub.

Console

  1. Ve a la página Reservas de Lite.

    Ir a Reservas de Lite

  2. Haz clic en Crear reserva de Lite.

  3. Selecciona una región.

  4. Ingresa un ID de reserva de Lite.

  5. Aprovisiona la cantidad de unidades de capacidad de procesamiento.

  6. Haz clic en Crear.

gcloud

Para crear una reserva de Lite, usa el comando gcloud pubsub lite-reservations create:

gcloud pubsub lite-reservations create myRes \
  --location=us-central1 \
  --throughput-capacity=INTEGER_NUMBER_OF_UNITS
gcloud pubsub lite-topics create myTopic \
  --throughput-reservation=myRez \
  --zone=ZONE \
  --location=us-central1a \
  --partitions \
  --storage

Go

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func createReservation(w io.Writer, projectID, region, reservationID string, throughputCapacity int) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	// throughputCapacity := 4
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	res, err := client.CreateReservation(ctx, pubsublite.ReservationConfig{
		Name:               reservationPath,
		ThroughputCapacity: throughputCapacity,
	})
	if err != nil {
		return fmt.Errorf("client.CreateReservation got err: %w", err)
	}
	fmt.Fprintf(w, "Created reservation: %s\n", res.Name)
	return nil
}

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.api.gax.rpc.AlreadyExistsException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

public class CreateReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";
    // Each unit of throughput capacity supports up to 1 MiB/s of published messages or
    // 2 MiB/s of subscribed messages.
    int throughputCapacity = 4;

    createReservationExample(projectNumber, cloudRegion, reservationId, throughputCapacity);
  }

  public static void createReservationExample(
      long projectNumber, String cloudRegion, String reservationId, int throughputCapacity)
      throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationPath.toString())
            .setThroughputCapacity(throughputCapacity)
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation response = adminClient.createReservation(reservation).get();
      System.out.println(response.getAllFields() + " created successfully.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (AlreadyExistsException alreadyExists) {
        System.out.println("This reservation already exists.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

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, Reservation
from google.cloud.pubsublite.types import CloudRegion, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"
# Each unit of throughput capacity supports up to 1 MiB/s of published messages
# or 2 MiB/s of subscribed messages. Must be a positive integer.
# throughput_capacity = 4

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

reservation = Reservation(
    name=str(reservation_path),
    throughput_capacity=throughput_capacity,
)

client = AdminClient(cloud_region)
try:
    response = client.create_reservation(reservation)
    print(f"{response.name} created successfully.")
except AlreadyExists:
    print(f"{reservation_path} already exists.")

Actualiza una reserva de Lite

Puedes actualizar la cantidad de unidades de capacidad configuradas para una reserva de Lite.

Puedes actualizar una reserva de Lite con la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub Lite.

Console

  1. Ve a la página Reservas de Lite.

    Ir a Reservas de Lite

  2. Haz clic en el ID de la reserva de Lite.

  3. En la página Detalles de la reserva de Lite, haz clic en Editar.

gcloud

Para actualizar una reserva de Lite, usa el comando gcloud pubsub lite-reservations update:

gcloud pubsub lite-reservations update RESERVATION_ID \
  --location=REGION \
  --throughput-capacity=THROUGHPUT_CAPACITY

Reemplaza lo siguiente:

  • RESERVATION_ID: Es el ID de la reserva de Lite.
  • REGION: Es la región de la reserva.
  • THROUGHPUT_CAPACITY: Es la capacidad de procesamiento de la reserva.

Go

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func updateReservation(w io.Writer, projectID, region, reservationID string, throughputCapacity int) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation-id"
	// throughputCapacity := 8
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	config := pubsublite.ReservationConfigToUpdate{
		Name:               reservationPath,
		ThroughputCapacity: throughputCapacity,
	}
	updatedCfg, err := client.UpdateReservation(ctx, config)
	if err != nil {
		return fmt.Errorf("client.UpdateReservation got err: %w", err)
	}
	fmt.Fprintf(w, "Updated reservation: %#v\n", updatedCfg)
	return nil
}

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.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

public class UpdateReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";
    // Each unit of throughput capacity supports up to 1 MiB/s of published messages or
    // 2 MiB/s of subscribed messages.
    int throughputCapacity = 8;

    updateReservationExample(projectNumber, cloudRegion, reservationId, throughputCapacity);
  }

  public static void updateReservationExample(
      long projectNumber, String cloudRegion, String reservationId, int throughputCapacity)
      throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    com.google.protobuf.FieldMask fieldMask =
        com.google.protobuf.FieldMask.newBuilder().addPaths("throughput_capacity").build();

    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationPath.toString())
            .setThroughputCapacity(throughputCapacity)
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation reservationBeforeUpdate = adminClient.getReservation(reservationPath).get();
      System.out.println("Before update: " + reservationBeforeUpdate.getAllFields());

      Reservation reservationAfterUpdate =
          adminClient.updateReservation(reservation, fieldMask).get();
      System.out.println("After update: " + reservationAfterUpdate.getAllFields());
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

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, Reservation
from google.cloud.pubsublite.types import CloudRegion, ReservationPath
from google.protobuf.field_mask_pb2 import FieldMask

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"
# Each unit of throughput capacity supports up to 1 MiB/s of published messages
# or 2 MiB/s of subscribed messages. Must be a positive integer.
# throughput_capacity = 8

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

# Defines which fields to update in the reservation.
field_mask = FieldMask(paths=["throughput_capacity"])

reservation = Reservation(
    name=str(reservation_path), throughput_capacity=throughput_capacity
)

client = AdminClient(cloud_region)
try:
    response = client.get_reservation(reservation_path)
    print(f"Before update: {response}")

    response = client.update_reservation(reservation, field_mask)
    print(f"After update: {response}")
except NotFound:
    print(f"{reservation_path} is not found.")

Obtén detalles de la reserva de Lite

Puedes obtener detalles sobre una reserva de Lite con la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub Lite.

Console

  1. Ve a la página Reservas de Lite.

    Ir a Reservas de Lite

  2. Haz clic en el ID de la reserva de Lite.

gcloud

Para obtener detalles sobre una reserva de Lite, usa el comando gcloud pubsub lite-reservations describe:

gcloud pubsub lite-reservations describe RESERVATION_ID \
  --location=REGION

Reemplaza lo siguiente:

  • RESERVATION_ID: Es el ID de la reserva de Lite.
  • REGION: Es la región de la reserva.

Go

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func getReservation(w io.Writer, projectID, region, reservationID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	res, err := client.Reservation(ctx, reservationPath)
	if err != nil {
		return fmt.Errorf("client.Reservation got err: %w", err)
	}
	fmt.Fprintf(w, "Got reservation: %#v\n", res)
	return nil
}

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.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

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

    getReservationExample(projectNumber, cloudRegion, reservationId);
  }

  public static void getReservationExample(
      long projectNumber, String cloudRegion, String reservationId) throws Exception {
    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation response = adminClient.getReservation(reservationPath).get();
      long throughputCapacity = response.getThroughputCapacity();
      System.out.println(
          response.getAllFields()
              + "\nhas "
              + throughputCapacity
              + " units of throughput capacity.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

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, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

client = AdminClient(cloud_region)
try:
    response = client.get_reservation(reservation_path)
    print(
        f"{response.name} has {response.throughput_capacity} units of throughput capacity."
    )
except NotFound:
    print(f"{reservation_path} is not found.")

Enumerar reservas de Lite

Console

gcloud

Para ver una lista de las reservas de Lite en un proyecto, usa el comando gcloud pubsub lite-reservations list:

gcloud pubsub lite-reservations list \
  --location=REGION

Reemplaza lo siguiente:

  • REGION: Es la región de la reserva.

Go

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
	"google.golang.org/api/iterator"
)

func listReservations(w io.Writer, projectID, region string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, region)
	resIter := client.Reservations(ctx, parent)
	for {
		res, err := resIter.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("resIter.Next() got err: %w", err)
		}
		fmt.Fprintf(w, "Got reservation config: %v", res)
	}
	return nil
}

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.LocationPath;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.List;

public class ListReservationsExample {

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

    listReservationsExample(projectNumber, cloudRegion);
  }

  public static void listReservationsExample(long projectNumber, String cloudRegion)
      throws Exception {

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

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      List<Reservation> reservations = adminClient.listReservations(locationPath).get();
      for (Reservation reservation : reservations) {
        System.out.println(reservation.getAllFields());
      }
      System.out.println(reservations.size() + " reservation(s) listed in " + locationPath + ".");
    }
  }
}

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 LocationPath

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

location_path = LocationPath(project_number, cloud_region)

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

for reservation in response:
    print(reservation)

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

Borrar una reserva de Lite

Puedes borrar reservas de Lite con la consola de Google Cloud, Google Cloud CLI o la API de Pub/Sub Lite. Para borrar una reserva, no debe contener ningún tema. Puedes adjuntar temas existentes a una reserva diferente y, luego, borrarla.

Console

  1. Ve a la página Reservas de Lite.

    Ir a Reservas de Lite

  2. Haz clic en el ID de la reserva de Lite.

  3. En la página Detalles de la reserva de Lite, haz clic en Borrar.

  4. En el cuadro de diálogo que aparece, haz clic en Borrar para confirmar que deseas borrar la reserva de Lite.

gcloud

Para borrar una reserva de Lite, usa el comando gcloud pubsub lite-reservations delete:

gcloud pubsub lite-reservations delete RESERVATION_ID \
  --location=REGION

Reemplaza lo siguiente:

  • RESERVATION_ID: Es el ID de la reserva de Lite.
  • REGION: Es la región de la reserva.

Go

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

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func deleteReservation(w io.Writer, projectID, region, reservationID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	err = client.DeleteReservation(ctx, reservationPath)
	if err != nil {
		return fmt.Errorf("client.DeleteReservation got err: %w", err)
	}
	fmt.Fprint(w, "Deleted reservation")
	return nil
}

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.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import java.util.concurrent.ExecutionException;

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

    deleteReservationExample(projectNumber, cloudRegion, reservationId);
  }

  public static void deleteReservationExample(
      long projectNumber, String cloudRegion, String reservationId) throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

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

    // If a reservation has topics attached, you must delete the topics before deleting
    // the reservation.
    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      adminClient.deleteReservation(reservationPath).get();
      System.out.println(reservationPath + " deleted successfully.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

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, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

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

¿Qué sigue?