Créer et gérer des réservations Lite

Ce document explique comment utiliser et gérer les réservations Pub/Sub Lite. Ce document explique également le concept d'unités de capacité et explique comment déterminer le nombre d'unités nécessaires pour gérer le débit de votre application.

Présentation des réservations Lite

Les réservations Lite provisionnent la capacité de débit et la partagent de manière dynamique entre un ou plusieurs sujets Lite au sein d'une région. Il peut s'agir de sujets Lite régionaux ou zonaux. L'utilisation de réservations Lite est une meilleure option que de définir la capacité de débit de chaque sujet Lite. Avec les réservations Lite, vous gérez et surveillez moins de ressources. De plus, vous n'avez pas à choisir la capacité de débit de chaque sujet Lite.

Pour utiliser une réservation Lite, vous devez associer un sujet Lite situé dans la même région à la réservation Lite spécifique. Vous pouvez associer une seule réservation Lite à des sujets Lite zonaux et régionaux. Toutes les partitions d'un sujet Lite associée à une réservation Lite consomment de manière dynamique la capacité de débit provisionnée dans la réservation Lite. Si vous spécifiez une réservation Lite pour un sujet Lite, vous pouvez également inclure des limites de débit afin de limiter la capacité de débit de chaque partition du sujet Lite.

Présentation des unités de capacité

La capacité de débit d'une réservation Lite est provisionnée en unités de capacité.

Une unité de capacité correspond au débit suivant:

Type de sujet Lite Débit en publication en Mbit/s Débit en abonnement en Mbit/s
Zonal 1 2
Régional 0,25 0,5

Consignes pour nommer une réservation

Le nom d'une ressource Pub/Sub Lite identifie de manière unique une ressource Pub/Sub Lite, telle qu'un sujet, un abonnement ou une réservation. Le nom de la ressource doit respecter le format suivant:

projects/project-identifier/collection/ID

  • project-identifier: doit correspondre à l'ID ou au numéro du projet, disponible dans la console Google Cloud. Par exemple, my-cool-project est un ID de projet. 123456789123 est un numéro de projet.

  • collection: doit être topics, subscriptions ou reservations.

  • ID: doit respecter les consignes suivantes:

    • ne doivent pas commencer par la chaîne goog ;
    • Commencer par une lettre
    • contenir entre 3 et 255 caractères ;
    • Ne contenir que les caractères suivants: lettres [A-Za-z], chiffres [0-9], tirets -, traits de soulignement _, points ., tildes ~, signes plus + et signes de pourcentage %

    Vous pouvez utiliser les caractères spéciaux de la liste précédente dans les noms de ressources sans codage en URL. Toutefois, vous devez vous assurer que tous les autres caractères spéciaux sont correctement codés ou décodés lorsque vous les utilisez dans des URL. Par exemple, mi-tópico est un ID non valide. Cependant, mi-t%C3%B3pico est valide. Ce format est important lorsque vous effectuez des appels REST.

Consignes d'utilisation d'une réservation Lite

Le provisionnement du débit avec les réservations Lite est obligatoire pour les sujets Lite régionaux et facultatif pour les sujets Lite zonaux. Une réservation Lite est une ressource régionale.

Tenez compte des points suivants lorsque vous envisagez de configurer une réservation Lite:

  • Le nombre d'unités de capacité nécessaires pour une réservation Lite doit être égal au débit maximal attendu au cours d'une minute donnée pour tous les sujets et abonnements de cette réservation Lite.

  • Lorsque le débit combiné de tous les sujets Lite d'une réservation Lite atteint sa capacité, la publication et la diffusion sont limitées. Les serveurs Pub/Sub Lite cessent d'envoyer des messages aux clients et les messages sont mis en mémoire tampon dans le client éditeur. Vous pouvez configurer une alerte pour reservation/throughput_capacity/utilization afin d'être informé lorsque la réservation risque d'être limitée, et ainsi d'augmenter la taille de la réservation.

  • Vous pouvez mettre à jour le débit des réservations aussi souvent que vous le souhaitez. Les modifications prennent effet en moins d'une minute. Toutefois, si vous diminuez le débit d'une réservation, le montant le plus élevé continue de vous être facturé pendant 24 heures. Pub/Sub Lite est intrinsèquement un système basé sur la capacité, dans lequel les scalings à la hausse sont instantanés et les réductions de capacité sont possibles.

  • Tous les sujets Lite associés à une réservation Lite utilisent le même pool de capacité de débit. Il est donc possible qu'un sujet Lite utilise soudainement une grande capacité de débit, ce qui prive d'autres sujets Lite et les empêche de publier ou de recevoir des messages. Si vous avez besoin d'une isolation complète pour tous les sujets Lite, vous pouvez les associer à des réservations indépendantes.

Impact des partitions sur une réservation Lite

Le nombre total de partitions sur tous les sujets Lite d'une réservation Lite ne doit pas être supérieur au nombre d'unités de capacité réservées. Par exemple, vous ne pouvez pas associer une réservation Lite de 10 unités de capacité à un sujet Lite ou à un ensemble de sujets Lite dont le nombre total de partitions est supérieur à 10.

Calculer des unités de capacité pour une réservation Lite

La taille d'une réservation Lite est définie par le nombre d'unités de capacité. Les exemples suivants montrent comment estimer la capacité requise pour des sujets Lite spécifiques.

  1. déterminer le débit maximal en publication ;

    Estimez le pic de débit de tous les sujets Lite associés à la réservation Lite. Une estimation approximative du débit est suffisante, car vous pouvez toujours mettre à jour la taille de la réservation.

  2. Déterminer le débit maximal en abonnement

    Le débit maximal en abonnement est calculé de la même manière que le débit maximal en publication. Cependant, gardez à l'esprit que vos abonnés n'ont pas nécessairement besoin de recevoir des messages au taux maximal des éditeurs. Si les retards de traitement sont acceptables, Pub/Sub Lite vous permet de mettre les messages en mémoire tampon et de les traiter à un rythme régulier. Parallèlement, vous pouvez souhaiter disposer d'une capacité d'abonnement supérieure à la capacité de publication pour gérer les temps d'arrêt occasionnels des abonnés.

  3. Déterminez le nombre total d'unités de capacité requises.

    Le tableau de la section précédente spécifie le nombre de Mbit/s qu'une unité de capacité peut accueillir pour différentes opérations. Voici la formule permettant de calculer les unités de capacité requises pour un exemple de réservation Lite:

    • Débit maximal en publication des sujets Lite zonaux = Pz MiBps
    • Pic de débit en publication des sujets Lite régionaux = Pr MiBps
    • Pic de débit en abonnement des sujets Lite zonaux = Sz MiBps
    • Pic de débit en abonnement des sujets Lite régionaux = Sr MiBps

      Nombre d'unités de capacité requises = (Pz / 1 MiBps) + (Pr/0.25 MiBps) + (Sz/2 MiBps) + (Sr/0.5 MiBps)

      Si le nombre n'est pas entier, vous devez arrondir la valeur.

Configurer la capacité de débit sans réservation Lite

  • Capacité de débit en publication du sujet: vous pouvez spécifier une capacité de débit comprise entre 4 et 16 Mbit/s, et la valeur doit être un nombre entier.

  • Capacité de débit en abonnement au sujet: vous pouvez spécifier une capacité de débit comprise entre 4 et 32 Mbit/s, et la valeur doit être un nombre entier.

Pour le débit en abonnement, nous vous recommandons de provisionner votre capacité de débit de sorte qu'elle corresponde au produit de votre débit en publication attendu et du nombre d'abonnements associés à votre sujet.

Les capacités d'éditeur et d'abonné provisionnées pour un sujet individuel ne sont pas interchangeables. C'est pourquoi nous vous recommandons de toujours utiliser les réservations.

Il existe des différences dans la facturation lors du provisionnement de la capacité directement pour les sujets au lieu d'utiliser des réservations. Pour en savoir plus, consultez la page des tarifs de Pub/Sub Lite.

Créer une réservation Lite

Une réservation Lite doit se trouver dans le même projet et la même région que tous les sujets Lite qui lui sont associés. Pour obtenir la liste des zones et régions disponibles, consultez la page Emplacements Pub/Sub Lite.

Vous pouvez créer une réservation Lite à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Pub/Sub Lite.

Console

  1. Accédez à la page Réservations Lite.

    Accéder aux réservations Lite

  2. Cliquez sur Créer une réservation Lite.

  3. Sélectionnez une région.

  4. Saisissez un ID de réservation Lite.

  5. Provisionnez la quantité d'unités de capacité de débit.

  6. Cliquez sur Créer.

gcloud

Pour créer un sujet Lite, utilisez la commande 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

Avant d'exécuter cet exemple, suivez les instructions de configuration pour Go décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python décrites dans les bibliothèques clientes 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.")

Mettre à jour une réservation Lite

Vous pouvez mettre à jour le nombre d'unités de capacité configurées pour une réservation Lite.

Vous pouvez mettre à jour une réservation Lite à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Pub/Sub Lite.

Console

  1. Accédez à la page Réservations Lite.

    Accéder aux réservations Lite

  2. Cliquez sur l'ID de réservation Lite.

  3. Sur la page des détails de la réservation Lite, cliquez sur Modifier.

gcloud

Pour mettre à jour une réservation Lite, utilisez la commande gcloud pubsub lite-reservations update :

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

Remplacez les éléments suivants :

  • RESERVATION_ID : ID de la réservation Lite
  • REGION : région de la réservation
  • THROUGHPUT_CAPACITY: capacité de débit des réservations.

Go

Avant d'exécuter cet exemple, suivez les instructions de configuration pour Go décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python décrites dans les bibliothèques clientes 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.")

Obtenir les détails d'une réservation Lite

Vous pouvez obtenir des informations sur une réservation Lite à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Pub/Sub Lite.

Console

  1. Accédez à la page Réservations Lite.

    Accéder aux réservations Lite

  2. Cliquez sur l'ID de réservation Lite.

gcloud

Pour obtenir les détails d'une réservation Lite, utilisez la commande gcloud pubsub lite-reservations describe :

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

Remplacez les éléments suivants :

  • RESERVATION_ID : ID de la réservation Lite
  • REGION : région de la réservation

Go

Avant d'exécuter cet exemple, suivez les instructions de configuration pour Go décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python décrites dans les bibliothèques clientes 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.")

Répertorier les réservations Lite

Console

gcloud

Pour afficher la liste des réservations Lite dans un projet, utilisez la commande gcloud pubsub lite-reservations list :

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

Remplacez les éléments suivants :

  • REGION : région de la réservation

Go

Avant d'exécuter cet exemple, suivez les instructions de configuration pour Go décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python décrites dans les bibliothèques clientes 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.")

Supprimer une réservation Lite

Vous pouvez supprimer des réservations Lite à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Pub/Sub Lite. Pour que vous puissiez supprimer une réservation, celle-ci ne doit contenir aucun sujet. Vous pouvez associer des sujets existants à une autre réservation, puis supprimer la réservation.

Console

  1. Accédez à la page Réservations Lite.

    Accéder aux réservations Lite

  2. Cliquez sur l'ID de réservation Lite.

  3. Sur la page des détails de la réservation Lite, cliquez sur Supprimer.

  4. Dans la boîte de dialogue qui s'affiche, cliquez sur Supprimer pour confirmer la suppression de la réservation Lite.

gcloud

Pour supprimer une réservation Lite, utilisez la commande gcloud pubsub lite-reservations delete :

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

Remplacez les éléments suivants :

  • RESERVATION_ID : ID de la réservation Lite
  • REGION : région de la réservation

Go

Avant d'exécuter cet exemple, suivez les instructions de configuration pour Go décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java décrites dans les bibliothèques clientes 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

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python décrites dans les bibliothèques clientes 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.")

Étapes suivantes