Creare e gestire le prenotazioni Lite

Questo documento spiega come utilizzare e gestire le prenotazioni Pub/Sub Lite. Questo documento spiega anche il concetto di unità di capacità e come determinare quante sono necessarie per soddisfare la velocità effettiva della tua applicazione.

Panoramica delle prenotazioni Lite

Esegui il provisioning delle prenotazioni Lite e condividi dinamicamente la capacità della velocità effettiva tra uno o più argomenti Lite in una regione. Questi argomenti possono essere argomenti Lite a livello di regione o zona. L'utilizzo delle prenotazioni Lite è un'opzione migliore rispetto all'impostazione della capacità di velocità effettiva dei singoli argomenti Lite. Con le prenotazioni Lite, puoi gestire e monitorare meno risorse. Inoltre, non è necessario scegliere la capacità di velocità effettiva dei singoli argomenti Lite.

Per utilizzare una prenotazione Lite, devi collegare un argomento Lite che si trova nella stessa regione alla prenotazione Lite specifica. Puoi collegare una singola prenotazione Lite ad argomenti Lite a livello di zona e di regione. Tutte le partizioni di un argomento Lite collegato a una prenotazione Lite utilizzano dinamicamente la capacità di velocità effettiva di cui è stato eseguito il provisioning nella prenotazione Lite. Se specifichi una prenotazione Lite per un argomento Lite, puoi anche includere limiti di frequenza per limitare la capacità di velocità effettiva di ogni partizione dell'argomento Lite.

Panoramica delle unità di capacità

Il provisioning della capacità di velocità effettiva di una prenotazione Lite viene eseguito in unità di capacità.

Un'unità di capacità corrisponde alla seguente velocità effettiva:

Tipo di argomento Lite Velocità effettiva di pubblicazione in MiBps Velocità effettiva di sottoscrizione in MiBps
Zonale 1 2
Regionale 0,25 0.5

Linee guida per assegnare un nome a una prenotazione

Il nome di una risorsa Pub/Sub Lite identifica in modo univoco una risorsa Pub/Sub Lite, ad esempio un argomento, una sottoscrizione o una prenotazione. Il nome della risorsa deve rientrare nel formato seguente:

projects/project-identifier/collection/ID

  • project-identifier: deve essere l'ID o il numero del progetto, disponibile nella console Google Cloud. Ad esempio, my-cool-project è un ID progetto. 123456789123 è un numero di progetto.

  • collection: deve essere topics, subscriptions o reservations.

  • ID: deve essere conforme alle seguenti linee guida:

    • Non iniziare con la stringa goog
    • Inizia con una lettera
    • Contiene tra 3 e 255 caratteri
    • Contenere solo i seguenti caratteri: lettere [A-Za-z], numeri [0-9], trattini -, trattini bassi _, punti ., tilde ~, segni più + e segni di percentuale %

    Puoi utilizzare i caratteri speciali nell'elenco precedente nei nomi delle risorse senza codifica URL. Tuttavia, devi assicurarti che tutti gli altri caratteri speciali siano codificati o decodificati correttamente quando li utilizzi negli URL. Ad esempio, mi-tópico è un ID non valido. Tuttavia, mi-t%C3%B3pico è valido. Questo formato è importante quando effettui chiamate REST.

Linee guida per l'utilizzo di una prenotazione Lite

La velocità effettiva di provisioning con le prenotazioni Lite è obbligatoria per gli argomenti Lite a livello di regione ed è facoltativa per gli argomenti Lite a livello di zona. Una prenotazione Lite è una risorsa a livello di regione.

Quando prevedi di configurare una prenotazione Lite, tieni presente quanto segue:

  • Il numero di unità di capacità necessarie per una prenotazione Lite deve corrispondere alla velocità effettiva massima prevista in un determinato minuto per tutti gli argomenti e le sottoscrizioni nella prenotazione Lite.

  • Quando la velocità effettiva combinata di tutti gli argomenti Lite in una prenotazione Lite raggiunge la sua capacità, la pubblicazione e la pubblicazione vengono limitate. I server Pub/Sub Lite interrompono l'invio di messaggi ai client e i messaggi vengono inseriti nel buffer nel client dell'editore. Puoi configurare un avviso per reservation/throughput_capacity/utilization per informarti quando la prenotazione rischia di essere limitata, in modo da poter aumentare le dimensioni della prenotazione.

  • Puoi aggiornare la velocità effettiva delle prenotazioni tutte le volte che vuoi. Le modifiche diventeranno effettive in meno di un minuto. Tuttavia, se riduci la velocità effettiva di una prenotazione, continui a ricevere l'addebito dell'importo più elevato per un periodo di 24 ore. Pub/Sub Lite è intrinsecamente un sistema di pagamento per capacità, in cui gli scale up sono istantanei e gli scale down sono possibili.

  • Tutti gli argomenti Lite collegati a una prenotazione Lite utilizzano lo stesso pool di capacità di velocità effettiva. Di conseguenza, è possibile che un argomento Lite utilizzi improvvisamente una grande quantità di capacità di velocità effettiva, eliminando altri argomenti Lite e impedendo loro di pubblicare o ricevere messaggi. Se hai bisogno di un isolamento completo degli argomenti Lite, puoi collegarli a prenotazioni indipendenti.

Impatto delle partizioni su una prenotazione Lite

Il numero totale di partizioni in tutti gli argomenti Lite in una prenotazione Lite non deve essere maggiore del numero di unità di capacità prenotate. Ad esempio, non puoi collegare una prenotazione Lite con 10 unità di capacità a un argomento Lite o a un set di argomenti Lite il cui numero totale di partizioni è maggiore di 10.

Calcolare le unità di capacità per una prenotazione Lite

Le dimensioni di una prenotazione Lite sono definite dal numero di unità di capacità. Gli esempi riportati di seguito mostrano come stimare la capacità richiesta per singoli argomenti Lite.

  1. Determinare la velocità effettiva di pubblicazione massima.

    Stima il picco della velocità effettiva di tutti gli argomenti Lite collegati alla prenotazione Lite. Una stima approssimativa della velocità effettiva è sufficiente, dal momento che puoi sempre aggiornare la dimensione della prenotazione.

  2. Determina la velocità effettiva di sottoscrizione massima.

    La velocità effettiva di sottoscrizione massima viene calcolata in modo simile alla velocità effettiva di pubblicazione massima. Tuttavia, tieni presente che i tuoi sottoscrittori non devono necessariamente ricevere messaggi con la frequenza massima degli editori. Se i ritardi nell'elaborazione sono accettabili, puoi utilizzare Pub/Sub Lite per eseguire il buffering dei messaggi ed elaborarli a una velocità costante. Allo stesso tempo, potresti voler avere una capacità di abbonamento superiore alla capacità di pubblicazione per soddisfare i tempi di inattività occasionali degli abbonati.

  3. Determina il numero totale di unità di capacità richieste.

    La tabella nella sezione precedente specifica il numero di MiBps che un'unità di capacità può supportare per operazioni diverse. Di seguito è riportata la formula per calcolare le unità di capacità richieste per una prenotazione Lite di esempio:

    • Velocità effettiva di pubblicazione massima degli argomenti Lite a livello di zona = Pz MiBps
    • Velocità effettiva di pubblicazione massima degli argomenti Lite a livello di regione = Pr MiBps
    • Velocità effettiva massima di sottoscrizione degli argomenti Lite a livello di zona = Sz MiBps
    • Velocità effettiva di sottoscrizione massima degli argomenti Lite a livello di regione = Sr MiBps

      Numero di unità di capacità richieste = (Pz / 1 MiBps) + (Pr/0.25 MiBps) + (Sz/2 MiBps) + (Sr/0.5 MiBps)

      Se il numero non è intero, devi arrotondarlo.

Configura la capacità di velocità effettiva senza una prenotazione Lite

  • Capacità di velocità effettiva di pubblicazione degli argomenti: puoi specificare da 4 a 16 MiBps di capacità di velocità effettiva e il valore deve essere un numero intero.

  • Capacità di velocità effettiva di sottoscrizione argomento: puoi specificare da 4 a 32 MiBps di capacità di velocità effettiva e il valore deve essere un numero intero.

Per la velocità effettiva di sottoscrizione, ti consigliamo di eseguire il provisioning della capacità di velocità effettiva in modo che corrisponda alla velocità effettiva di pubblicazione prevista e al numero di sottoscrizioni per il tuo argomento.

La capacità di publisher e sottoscrittore di cui è stato eseguito il provisioning per un singolo argomento non sono intercambiabili. Per questo motivo, consigliamo sempre di utilizzare le prenotazioni.

Esistono differenze nella fatturazione quando esegui il provisioning della capacità direttamente per gli argomenti anziché utilizzare le prenotazioni. Per maggiori dettagli, consulta la pagina dei prezzi di Pub/Sub Lite.

Crea una prenotazione Lite

Una prenotazione Lite deve trovarsi nello stesso progetto e nella stessa regione di qualsiasi argomento Lite collegato. Per un elenco delle zone e delle regioni disponibili, consulta Località di Pub/Sub Lite.

Puoi creare una prenotazione Lite con la console Google Cloud, Google Cloud CLI o l'API Pub/Sub Lite.

Console

  1. Vai alla pagina Prenotazioni di Lite.

    Vai a Prenotazioni Lite

  2. Fai clic su Crea prenotazione Lite.

  3. Seleziona una regione.

  4. Inserisci un ID prenotazione Lite.

  5. Esegui il provisioning della quantità di unità di capacità di velocità effettiva.

  6. Fai clic su Crea.

gcloud

Per creare una prenotazione Lite, utilizza il 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

Prima di eseguire questo esempio, segui le istruzioni per la configurazione di Go in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione Java in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client di 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.")

Aggiorna una prenotazione Lite

Puoi aggiornare il numero di unità di capacità configurate per una prenotazione Lite.

Puoi aggiornare una prenotazione Lite con la console Google Cloud, Google Cloud CLI o l'API Pub/Sub Lite.

Console

  1. Vai alla pagina Prenotazioni di Lite.

    Vai a Prenotazioni Lite

  2. Fai clic sull'ID prenotazione Lite.

  3. Nella pagina dei dettagli della prenotazione Lite, fai clic su Modifica.

gcloud

Per aggiornare una prenotazione Lite, utilizza il comando gcloud pubsub lite-reservations update:

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

Sostituisci quanto segue:

  • RESERVATION_ID: l'ID della prenotazione Lite
  • REGION: la regione della prenotazione
  • THROUGHPUT_CAPACITY: la capacità di velocità effettiva della prenotazione.

Go

Prima di eseguire questo esempio, segui le istruzioni per la configurazione di Go in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione Java in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client di 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.")

Recuperare i dettagli della prenotazione Lite

Puoi ottenere i dettagli di una prenotazione Lite utilizzando la console Google Cloud, Google Cloud CLI o l'API Pub/Sub Lite.

Console

  1. Vai alla pagina Prenotazioni di Lite.

    Vai a Prenotazioni Lite

  2. Fai clic sull'ID prenotazione Lite.

gcloud

Per ottenere i dettagli di una prenotazione Lite, utilizza il comando gcloud pubsub lite-reservations describe:

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

Sostituisci quanto segue:

  • RESERVATION_ID: l'ID della prenotazione Lite
  • REGION: la regione della prenotazione

Go

Prima di eseguire questo esempio, segui le istruzioni per la configurazione di Go in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione Java in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client di 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.")

Elenco prenotazioni Lite

Console

gcloud

Per visualizzare un elenco delle prenotazioni Lite in un progetto, utilizza il comando gcloud pubsub lite-reservations list:

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

Sostituisci quanto segue:

  • REGION: la regione della prenotazione

Go

Prima di eseguire questo esempio, segui le istruzioni per la configurazione di Go in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione Java in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client di 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.")

Elimina una prenotazione Lite

Puoi eliminare le prenotazioni Lite con la console Google Cloud, Google Cloud CLI o l'API Pub/Sub Lite. Per eliminare una prenotazione, non deve contenere argomenti. Puoi collegare gli argomenti esistenti a un'altra prenotazione, quindi eliminarla.

Console

  1. Vai alla pagina Prenotazioni di Lite.

    Vai a Prenotazioni Lite

  2. Fai clic sull'ID prenotazione Lite.

  3. Nella pagina dei dettagli della prenotazione Lite, fai clic su Elimina.

  4. Nella finestra di dialogo visualizzata, fai clic su Elimina per confermare che vuoi eliminare la prenotazione Lite.

gcloud

Per eliminare una prenotazione Lite, utilizza il comando gcloud pubsub lite-reservations delete:

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

Sostituisci quanto segue:

  • RESERVATION_ID: l'ID della prenotazione Lite
  • REGION: la regione della prenotazione

Go

Prima di eseguire questo esempio, segui le istruzioni per la configurazione di Go in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione Java in Librerie client di 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

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Python in Librerie client di 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.")

Passaggi successivi