Cómo crear y administrar 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 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 que está conectado a una reserva de Lite consumen de forma dinámica la capacidad de procesamiento aprovisionada en la reserva de Lite. Si especificas una reserva de Lite para un tema Lite, también puedes incluir límites de frecuencia para limitar la capacidad de procesamiento de cada partición del tema de 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 a 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
    • 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 las URLs. Por ejemplo, mi-tópico no 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 los temas regionales de Lite y es opcional para los temas Lite zonales. Una reserva de Lite es un recurso regional.

Ten en cuenta lo siguiente cuando planifiques configurar una reserva 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 para todos los temas y suscripciones de esa reserva de Lite.

  • Cuando la capacidad de procesamiento combinada de todos los temas de Lite en una reserva de Lite alcanza su capacidad máxima, 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 avise cuando la reserva está en riesgo de ser limitada, de modo 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 la capacidad de procesamiento de una reserva, se te seguirá cobrando la cantidad más alta durante un período de 24 horas. Pub/Sub Lite es inherentemente un sistema de pago por capacidad, en el que los escalamientos son instantáneos y se pueden reducir la escala verticalmente.

  • 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 cantidad de capacidad de procesamiento, lo que evita que otros temas de Lite publiquen o reciban mensajes. Si necesitas un aislamiento completo entre temas Lite, puedes adjuntarlos a reservas independientes.

Impacto de 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 a un conjunto de temas de Lite cuya cantidad total de particiones sea 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. En los siguientes ejemplos, se muestra cómo estimar la capacidad necesaria para temas individuales de Lite.

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

    Estima el máximo en la 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 máxima de suscripción se calcula de manera similar a la capacidad de procesamiento máxima de publicación. Sin embargo, ten en cuenta que no es necesario que los suscriptores reciban mensajes a la tasa máxima de los publicadores. Si las demoras en el procesamiento son aceptables, Pub/Sub Lite te permite almacenar los mensajes en búfer y procesarlos a un ritmo constante. Al mismo tiempo, es posible que quieras tener más capacidad de suscripción que capacidad de publicación para adaptarse al tiempo de inactividad ocasional 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 admitir para diferentes operaciones. La siguiente es la fórmula para calcular las unidades de capacidad necesarias para una reserva 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 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 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 la cantidad de suscripciones de 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.

Existen diferencias en la facturación cuando se aprovisiona la capacidad directamente para los temas, en lugar de usar 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 que esté conectado 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 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. 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 para 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 para 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 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 para 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 para 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 temas. 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 para 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?