Creare e gestire prenotazioni Lite

Questo documento spiega come utilizzare e gestire le prenotazioni di 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

Le prenotazioni Lite eseguono il provisioning e condividono dinamicamente la capacità della velocità effettiva tra uno o più argomenti Lite in una regione. Questi argomenti possono essere argomenti Lite regionali o di 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 monitori meno risorse. Inoltre, non devi scegliere la capacità di throughput di 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 sia agli argomenti Lite a livello di zona sia a quelli a livello di regione. Tutte le partizioni di un argomento Lite collegato a una prenotazione Lite consumano dinamicamente la capacità della 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 throughput di ciascuna 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
A livello di zona 1 2
Regionale 0,25 0,5

Linee guida per assegnare un nome a una prenotazione

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

projects/project-identifier/collection/ID

  • project-identifier: deve essere l'ID progetto 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 deve iniziare con la stringa goog
    • Inizia con una lettera
    • Contenere da 3 a 255 caratteri
    • Contenere solo i seguenti caratteri: lettere [A-Za-z], numeri [0-9], trattini -, trattini bassi _, punti ., tildi ~, 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 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.

Tieni presente quanto segue quando prevedi di configurare una prenotazione Lite:

  • Il numero di unità di capacità necessarie per una prenotazione Lite deve essere uguale alla velocità effettiva di picco prevista in un determinato minuto per tutti gli argomenti e gli abbonamenti 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 smettono di inviare messaggi ai client e i messaggi vengono memorizzati nella memoria intermedia del client publisher. Puoi impostare un avviso per reservation/throughput_capacity/utilization per ricevere una notifica quando la prenotazione rischia di essere limitata in modo da poter aumentare le dimensioni della prenotazione.

  • Puoi aggiornare il throughput delle prenotazioni tutte le volte che vuoi. Le modifiche vengono applicate in meno di un minuto. Tuttavia, se riduci il throughput di una prenotazione, ti verrà addebitato l'importo più elevato per un periodo di 24 ore. Pub/Sub Lite è un sistema di pagamento per capacità, in cui gli aumenti di scala sono istantanei e sono possibili riduzioni di scala.

  • Tutti gli argomenti Lite collegati a una prenotazione Lite utilizzano lo stesso pool di capacità di throughput. È quindi possibile che un argomento Lite utilizzi improvvisamente una grande quantità di capacità di throughput, impedendo agli altri argomenti Lite di pubblicare o ricevere 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 di una prenotazione Lite non deve essere superiore al numero di unità di capacità prenotate. Ad esempio, non puoi collegare una prenotazione Lite di 10 unità di capacità a un argomento Lite o a un insieme di argomenti Lite il cui numero totale di partizioni è superiore a 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 mostrano come stimare la capacità richiesta per i singoli argomenti Lite.

  1. Determina la velocità effettiva di pubblicazione massima.

    Stimare il picco della velocità effettiva di tutti gli argomenti Lite collegati alla prenotazione Lite. È sufficiente una stima approssimativa della produttività, poiché puoi sempre aggiornare le dimensioni 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 iscritti non devono necessariamente ricevere i messaggi alla frequenza massima dei publisher. Se i ritardi nell'elaborazione sono accettabili, Pub/Sub Lite ti consente di mettere in coda i messaggi e di elaborarli a una velocità costante. Allo stesso tempo, ti consigliamo di avere una maggiore capacità di iscrizioni rispetto alla capacità di pubblicazione per far fronte ai periodi di interruzione occasionali degli iscritti.

  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 di sottoscrizione massima 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 per eccesso.

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

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

  • Capacità velocità effettiva di sottoscrizione dell'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 delle iscrizioni, ti consigliamo di eseguire il provisioning della capacità di throughput in modo che corrisponda al prodotto della velocità effettiva di pubblicazione prevista e del numero di iscrizioni al tuo argomento.

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

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

Creare una prenotazione Lite

Una prenotazione Lite deve trovarsi nello stesso progetto e nella stessa regione degli argomenti Lite collegati. 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 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

Vai

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

Aggiornare 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à velocità effettiva della prenotazione.

Vai

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

Visualizzare 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 visualizzare 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

Vai

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

Vai

Prima di eseguire questo esempio, segui le istruzioni di configurazione di Go in Librerie client 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 riportate in Librerie client 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 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 poter eliminare una prenotazione, non deve contenere argomenti. Puoi collegare gli argomenti esistenti a un'altra prenotazione, 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

Vai

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