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 des unités de capacité et explique comment déterminer le nombre dont vous avez besoin pour gérer le débit de votre application.

Présentation des réservations Lite

Les réservations Lite provisionnent et partagent dynamiquement la capacité de débit entre un ou plusieurs sujets Lite au sein d'une région. Ces sujets peuvent être des sujets Lite régionaux ou zonaux. Il est préférable d'utiliser des réservations Lite que de définir la capacité de débit de sujets Lite individuels. Avec les réservations Lite, vous gérez et surveillez moins de ressources. De plus, vous n'avez pas besoin de 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 aux sujets Lite zonaux et régionaux. Toutes les partitions d'un sujet Lite associé à 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 Mio/s Débit en abonnement en Mio/s
Zonal 1 2
Régional 0.25 0,5

Consignes pour nommer une réservation

Un nom de 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 correspondre à topics, subscriptions ou reservations.

  • ID: doit respecter les directives suivantes:

    • Ne 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 encodage URL. Lorsque vous utilisez des caractères spéciaux dans vos URL, assurez-vous toutefois que tous les autres caractères spéciaux sont correctement encodés ou décodés. Par exemple, mi-tópico n'est pas un identifiant valide. Toutefois, 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 des 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 correspondre au débit maximal attendu à 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 distribution 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 averti lorsque la réservation risque d'être limitée. Vous pourrez ainsi 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 seront appliquées dans moins d'une minute. Toutefois, si vous réduisez le débit d'une réservation, le montant le plus élevé continue de vous être facturé pendant une période de 24 heures. Pub/Sub Lite est intrinsèquement un système de facturation à la capacité, dans lequel les scalings à la hausse sont instantanés et possibles.

  • Tous les sujets Lite associés à une réservation Lite consomment 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 élimine d'autres sujets Lite et les empêche de publier ou de recevoir des messages. Si vous avez besoin d'isoler complètement 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 dans 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 individuels.

  1. Déterminez 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. Toutefois, gardez à l'esprit que vos abonnés n'ont pas nécessairement besoin de recevoir des messages au taux de pointe 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. En même temps, vous souhaiterez peut-être 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 traiter pour différentes opérations. La formule suivante permet 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
    • Débit maximal en publication des sujets Lite régionaux = Pr MiBps
    • Débit maximal en abonnement des sujets Lite zonaux = Sz MiBps
    • Débit maximal en abonnement des sujets Lite régionaux = Sr MiBps

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

      Si ce nombre n'est pas entier, vous devez l'arrondir à la valeur supérieure.

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. Cette valeur doit être un entier.

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

Pour le débit en abonnement, nous vous recommandons de provisionner une capacité de débit égale au produit de votre débit en publication attendu et du nombre d'abonnements sur 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 de facturation lorsque vous provisionnez de la capacité directement pour des 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 de 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 de réservation.

Go

Avant d'exécuter cet exemple, suivez les instructions de configuration de 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 de 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 de 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 supprimer une réservation, elle 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 de 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