Creare e gestire 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 determinarne quante sono necessarie per soddisfare la velocità effettiva dell'applicazione.

Panoramica delle prenotazioni Lite

Le prenotazioni Lite eseguono il provisioning e condividono dinamicamente la capacità della velocità effettiva tra uno o più argomenti Lite in una regione. 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, gestisci e monitora meno risorse. Inoltre, non è necessario scegliere la capacità di velocità effettiva dei singoli argomenti Lite.

Per utilizzare una prenotazione Lite, devi collegare alla prenotazione Lite specifica un argomento Lite che si trova nella stessa regione. Puoi collegare una singola prenotazione Lite ad argomenti Lite a livello di zona e di regione. Tutte le partizioni in 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

Un nome 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 seguente formato:

projects/project-identifier/collection/ID

  • project-identifier: deve essere l'ID o il numero di 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
    • Contenere 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 dell'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 esegui chiamate REST.

Linee guida per l'utilizzo di una prenotazione Lite

Il provisioning della velocità effettiva con le prenotazioni Lite è obbligatorio per gli argomenti Lite a livello di regione ed è facoltativo per gli argomenti Lite a livello di zona. Una prenotazione Lite è una risorsa regionale.

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 in quella prenotazione Lite.

  • Quando la velocità effettiva combinata di tutti gli argomenti Lite in una prenotazione Lite raggiunge la sua capacità, la pubblicazione e la distribuzione vengono limitate. I server Pub/Sub Lite smettono di inviare messaggi ai client e i messaggi vengono inseriti nel buffer nel client dell'editore. Puoi configurare un avviso per reservation/throughput_capacity/utilization per sapere 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 tra meno di un minuto. Tuttavia, se diminuisci la velocità effettiva di una prenotazione, continuerà a esserti addebitato l'importo maggiore 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, un argomento Lite può utilizzare improvvisamente una grande quantità di capacità di velocità effettiva, esaurisce l'affaticamento di altri argomenti Lite e impedisce la pubblicazione o la ricezione di messaggi. Se hai bisogno di un isolamento completo tra gli 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 di 10 unità di capacità a un argomento Lite o un insieme di argomenti Lite il cui numero totale di partizioni è maggiore di 10.

Calcolare le unità di capacità per una prenotazione Lite

La dimensione di una prenotazione Lite è definita dal numero di unità di capacità. I seguenti esempi illustrano 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 le dimensioni della prenotazione.

  2. Determinare 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 hanno necessariamente bisogno di ricevere messaggi durante i picchi di frequenza dei publisher. Se sono accettabili ritardi nell'elaborazione, Pub/Sub Lite consente di eseguire il buffering dei messaggi ed elaborarli con una frequenza costante. Allo stesso tempo, ti conviene avere più capacità di sottoscrizione rispetto a quella di pubblicazione per far fronte ai 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ò ospitare per diverse operazioni. Di seguito è la formula per calcolare le unità di capacità richieste per una prenotazione Lite di esempio:

    • Velocità effettiva di pubblicazione massima per gli argomenti Lite a livello di zona = Pz MiBps
    • Velocità effettiva di pubblicazione massima per gli argomenti Lite a livello di regione = Pr MiBps
    • Velocità effettiva di sottoscrizione massima per gli argomenti Lite a livello di zona = Sz MiBps
    • Velocità effettiva di sottoscrizione massima per gli 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 arrotondare il valore.

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

  • Capacità di velocità effettiva di pubblicazione per l'argomento: 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 all'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à della velocità effettiva in modo che corrisponda al prodotto della velocità effettiva di pubblicazione prevista e al numero di sottoscrizioni per l'argomento.

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

Esistono differenze nella fatturazione quando si esegue direttamente il provisioning della capacità per gli argomenti anziché utilizzare le prenotazioni. Per i 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 degli argomenti Lite associati. Per un elenco delle zone e delle regioni disponibili, vedi Località 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 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 di configurazione di Go nelle 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 di Java nelle 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 nelle 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 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à della velocità effettiva di prenotazione.

Go

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go nelle 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 di Java nelle 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 nelle 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.")

Visualizza 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 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 di configurazione di Go nelle 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 di Java nelle 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 nelle 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 di configurazione di Go nelle 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 di Java nelle 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 nelle 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.")

Eliminare una prenotazione Lite

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

Console

  1. Vai alla pagina Prenotazioni 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 di configurazione di Go nelle 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 di Java nelle 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 nelle 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