Cómo crear y administrar reservas de Lite

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

Descripción general de las reservas de Lite

Las reservas de Lite aprovisionan y comparten dinámicamente la capacidad de procesamiento entre una o varios temas de Lite en una región. Estos temas pueden ser regionales o zonales Lite temas. Usar reservas de Lite es una mejor opción que configurar la capacidad de procesamiento de 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 temas individuales de Lite.

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 un solo Lite a temas Lite zonales y regionales. Todas las particiones de una El tema de Lite que está adjunto a una reserva de Lite consume de forma dinámica de la capacidad de procesamiento aprovisionada en la reserva Lite. Si lo haces especifica una reserva de Lite para un tema de Lite, también puedes incluir la tarifa límites para limitar la capacidad de procesamiento de cada partición del tema Lite.

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 MiBps Capacidad de procesamiento de suscripción en MiBps
Zonal 1 2
Regional 0.25 0.5

Lineamientos para asignar un nombre a una reserva

El nombre de un recurso de Pub/Sub Lite identifica de forma única recurso de Pub/Sub Lite, como un tema, una suscripción o 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
    • Contener 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 los nombres de recursos sin codificación de URL. Sin embargo, debes asegurarte de que los demás caracteres especiales estén codificados o decodificados de forma correcta cuando los uses en 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 a REST.

Lineamientos para usar una reserva de Lite

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

Ten en cuenta lo siguiente cuando planifiques configurar una cuenta de reserva:

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

  • Cuando la capacidad de procesamiento combinada de todos los temas de Lite en 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 para informarte cuando reserva está en peligro de limitarse para que puedas aumentar el tamaño de la reserva.

  • Puedes actualizar la capacidad de procesamiento de las reservas tantas veces como quieras. Los cambios se aplicarán en menos de un minuto. Sin embargo, si disminuyes un de la reserva, se te seguirá cobrando por la capacidad durante un período de 24 horas. Pub/Sub Lite tiene una capacidad de pago inherente en el que los escalamientos son instantáneos y es posible reducirlos.

  • Todos los temas de Lite adjuntos a una reserva de Lite consumen el mismo grupo de la capacidad de procesamiento. Por lo tanto, es posible que un tema Lite use una gran capacidad de procesamiento, lo que evita otros temas de Lite les impide publicar o recibir mensajes. Si necesitas aislamiento completo en los temas Lite, puedes adjuntarlos a reservas independientes.

Impacto de particiones en una reserva de Lite

La cantidad total de particiones de todos los temas de Lite en una reserva de Lite debe no sea mayor que la cantidad de unidades de capacidad reservadas. Por ejemplo, No se puede adjuntar una reserva de Lite de 10 unidades de capacidad a un tema de Lite ni a un conjunto Temas de Lite cuya cantidad total de particiones es superior a 10.

Calcula las unidades de capacidad para una reserva de Lite

El tamaño de una reserva de Lite se define por la cantidad de unidades de capacidad. El Los siguientes ejemplos muestran cómo estimar la capacidad requerida para temas individuales de Lite.

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

    Estimar el máximo en la capacidad de procesamiento de todos los temas Lite conectados al 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 máxima de suscripción se calcula de manera similar a la máxima de publicación de procesamiento. Sin embargo, ten en cuenta que los suscriptores no necesitan recibir mensajes a la tasa máxima de los publicadores. Si hay demoras en el procesamiento son aceptables, Pub/Sub Lite permite almacenar mensajes en búfer y procesarlos a un ritmo constante. Al mismo tiempo, es posible que quieras tener más de suscripción que la capacidad de publicación para acomodar el tiempo de inactividad de los suscriptores.

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

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

    • 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 de Lite = Pr MiBps
    • Capacidad de procesamiento máxima de suscripción de los temas Lite zonales = Sz MiBps
    • Capacidad de procesamiento máxima de suscripción de los temas regionales de 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.

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 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 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 para que sea igual al producto de tu capacidad de procesamiento de publicación esperada y la cantidad de suscripciones sobre tu 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.

Hay diferencias en la facturación cuando se aprovisiona la capacidad directamente en lugar de usar las reservas. Consulta la página de precios de Pub/Sub Lite. para conocer los 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 que están asociadas a ella. Para obtener una lista de las zonas y regiones disponibles, consulta Ubicaciones de Pub/Sub Lite.

Puedes crear una reserva 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 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. Haga 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 este ejemplo, sigue las instrucciones de configuración de Go en 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 este ejemplo, sigue las instrucciones de configuración de Go en 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.")

Obtener detalles de la reserva de Lite

Puedes obtener detalles sobre una reserva de Lite desde 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 este ejemplo, sigue las instrucciones de configuración de Go en 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 este ejemplo, sigue las instrucciones de configuración de Go en 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 incluir 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 este ejemplo, sigue las instrucciones de configuración de Go en 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?