Lite-Reservierungen erstellen und verwalten

In diesem Dokument wird erläutert, wie Pub/Sub Lite-Reservierungen verwendet und verwaltet werden. In diesem Dokument wird auch das Konzept der Kapazitätseinheiten erläutert. Außerdem erfahren Sie, wie Sie ermitteln, wie viele Kapazitätseinheiten erforderlich sind, um den Durchsatz Ihrer Anwendung zu gewährleisten.

Lite-Reservierungen – Übersicht

Mit Lite-Reservierungen werden Durchsatzkapazität für ein oder mehrere Lite-Themen in einer Region bereitgestellt und dynamisch geteilt. Diese Themen können regionale oder zonale Lite-Themen sein. Lite-Reservierungen sind eine bessere Option, als die Durchsatzkapazität einzelner Lite-Themen festzulegen. Mit Lite-Reservierungen können Sie weniger Ressourcen verwalten und überwachen. Außerdem müssen Sie die Durchsatzkapazität einzelner Lite-Themen nicht auswählen.

Wenn Sie eine Lite-Reservierung verwenden möchten, hängen Sie ein Lite-Thema, das sich in derselben Region befindet, an die jeweilige Lite-Reservierung an. Sie können sowohl an zonale als auch regionale Lite-Themen eine einzelne Lite-Reservierung anhängen. Alle Partitionen in einem Lite-Thema, das an eine Lite-Reservierung angehängt ist, nutzen dynamisch die Durchsatzkapazität der Lite-Reservierung. Wenn Sie eine Lite-Reservierung für ein Lite-Thema angeben, können Sie auch Ratenbegrenzungen festlegen, um die Durchsatzkapazität jeder Partition des Lite-Themas zu begrenzen.

Kapazitätseinheiten – Übersicht

Die Durchsatzkapazität einer Lite-Reservierung wird in Kapazitätseinheiten bereitgestellt.

Eine Kapazitätseinheit entspricht dem folgenden Durchsatz:

Lite-Thementyp Durchsatz der Veröffentlichung in MiB/s Abodurchsatz in MiB/s
Zonal 1 2
Regional 0,25 0,5

Richtlinien zum Benennen einer Reservierung

Ein Pub/Sub Lite-Ressourcenname kennzeichnet eine Pub/Sub Lite-Ressource eindeutig, z. B. ein Thema, ein Abo oder eine Reservierung. Der Ressourcenname muss das folgende Format haben:

projects/project-identifier/collection/ID

  • project-identifier: Muss die Projekt-ID oder Projektnummer aus der Google Cloud Console sein. Beispiel: my-cool-project ist eine Projekt-ID. 123456789123 ist eine Projektnummer.

  • collection: Muss topics, subscriptions oder reservations sein.

  • ID: Muss den folgenden Richtlinien entsprechen:

    • Sie dürfen nicht mit dem String goog beginnen.
    • Muss mit einem Buchstaben beginnen
    • Er muss zwischen 3 und 255 Zeichen lang sein
    • Sie dürfen nur die folgenden Zeichen enthalten: Buchstaben [A-Za-z], Ziffern [0-9], Bindestriche -, Unterstriche _, Punkte ., Tilden ~, Pluszeichen + und Prozentzeichen %

    Sie können die Sonderzeichen aus der vorherigen Liste in Ressourcennamen ohne URL-Codierung verwenden. Alle anderen Sonderzeichen müssen richtig codiert oder decodiert werden, wenn Sie sie in URLs verwenden. mi-tópico ist beispielsweise keine gültige ID. mi-t%C3%B3pico ist jedoch gültig. Dieses Format ist wichtig, wenn Sie REST-Aufrufe ausführen.

Richtlinien für die Verwendung einer Lite-Reservierung

Die Bereitstellung des Durchsatzes mit Lite-Reservierungen ist für regionale Lite-Themen erforderlich und für zonale Lite-Themen optional. Eine Lite-Reservierung ist eine regionale Ressource.

Beachten Sie Folgendes, wenn Sie eine Lite-Reservierung konfigurieren möchten:

  • Die Anzahl der für eine Lite-Reservierung erforderlichen Kapazitätseinheiten muss dem Spitzendurchsatz entsprechen, den Sie in einer bestimmten Minute für alle Themen und Abos in dieser Lite-Reservierung erwarten.

  • Wenn der kombinierte Durchsatz aller Lite-Themen in einer Lite-Reservierung seine Kapazität erreicht, werden Veröffentlichung und Bereitstellung gedrosselt. Die Pub/Sub Lite-Server senden keine Nachrichten mehr an die Clients und Nachrichten werden im Publisher-Client zwischengespeichert. Sie können eine Benachrichtigung für reservation/throughput_capacity/utilization einrichten, die Sie informiert, wenn die Reservierung möglicherweise gedrosselt wird, sodass Sie die Reservierungsgröße erhöhen können.

  • Sie können den Durchsatz der Reservierungen so oft aktualisieren, wie Sie möchten. Änderungen werden in weniger als einer Minute wirksam. Wenn Sie jedoch den Durchsatz einer Reservierung verringern, wird Ihnen der höhere Betrag für einen Zeitraum von 24 Stunden weiterhin in Rechnung gestellt. Pub/Sub Lite ist grundsätzlich ein kostenpflichtiges System, in dem Hochskalierungen sofort und Herunterskalierungen möglich sind.

  • Alle Lite-Themen, die an eine Lite-Reservierung angehängt sind, nutzen denselben Pool an Durchsatzkapazität. Daher kann es vorkommen, dass ein Lite-Thema plötzlich eine große Durchsatzkapazität verwendet, andere Lite-Themen zunichte machen und sie daran hindern, Nachrichten zu veröffentlichen oder zu empfangen. Wenn Sie eine vollständige Isolation zwischen Lite-Themen benötigen, können Sie sie mit unabhängigen Reservierungen verknüpfen.

Auswirkungen von Partitionen auf eine Lite-Reservierung

Die Gesamtzahl der Partitionen für alle Lite-Themen in einer Lite-Reservierung darf nicht größer als die Anzahl der reservierten Kapazitätseinheiten sein. Sie können beispielsweise keine Lite-Reservierung von 10 Kapazitätseinheiten an ein Lite-Thema oder eine Reihe von Lite-Themen mit mehr als 10 Partitionen anhängen.

Kapazitätseinheiten für eine Lite-Reservierung berechnen

Die Größe einer Lite-Reservierung wird durch die Anzahl der Kapazitätseinheiten definiert. Die folgenden Beispiele zeigen, wie Sie die für einzelne Lite-Themen erforderliche Kapazität schätzen können.

  1. Bestimmen Sie den Spitzendurchsatz für Veröffentlichungen.

    Schätzen Sie den Spitzenwert im Durchsatz aller Lite-Themen, die mit der Lite-Reservierung verknüpft sind. Eine grobe Schätzung für den Durchsatz ist ausreichend, da Sie die Größe der Reservierung jederzeit aktualisieren können.

  2. Ermittle den Spitzendurchsatz für Abos.

    Der Spitzendurchsatz für Abos wird ähnlich berechnet wie der Spitzendurchsatz für Veröffentlichungen. Bedenken Sie jedoch, dass Ihre Abonnenten nicht unbedingt Nachrichten in der Spitzenrate des Publishers erhalten müssen. Wenn Verzögerungen bei der Verarbeitung akzeptabel sind, können Sie Nachrichten mit Pub/Sub Lite zwischenspeichern und in einer konstanten Rate verarbeiten. Gleichzeitig kann es sinnvoll sein, mehr Abokapazität als Veröffentlichungskapazität zu haben, um gelegentliche Ausfallzeiten von Abonnenten zu vermeiden.

  3. Ermitteln Sie die Gesamtzahl der erforderlichen Kapazitätseinheiten.

    Die Tabelle im vorherigen Abschnitt gibt die Anzahl der MiBps an, die eine Kapazitätseinheit für verschiedene Vorgänge verarbeiten kann. Mit der folgenden Formel werden die Kapazitätseinheiten berechnet, die für eine Lite-Beispielreservierung erforderlich sind:

    • Spitzendurchsatz für Veröffentlichungen der zonalen Lite-Themen = Pz MiBps
    • Spitzendurchsatz für Veröffentlichungen der regionalen Lite-Themen = Pr MiBps
    • Spitzendurchsatz für Abos der zonalen Lite-Themen = Sz MiBps
    • Spitzendurchsatz für Abos der regionalen Lite-Themen = Sr MiBps

      Anzahl der erforderlichen Kapazitätseinheiten = (Pz / 1 MiBps) + (Pr/0.25 MiBps) + (Sz/2 MiBps) + (Sr/0.5 MiBps)

      Wenn die Zahl keine ganze Zahl ist, müssen Sie den Wert aufrunden.

Durchsatzkapazität ohne Lite-Reservierung konfigurieren

  • Durchsatzkapazität für das Veröffentlichen von Themen: Sie können eine Durchsatzkapazität von 4 bis 16 MiBps angeben und der Wert muss eine Ganzzahl sein.

  • Durchsatzkapazität für Themenabos: Sie können eine Durchsatzkapazität von 4 bis 32 MiBps angeben und der Wert muss eine Ganzzahl sein.

Für den Abodurchsatz empfehlen wir, dass Sie Ihre Durchsatzkapazität so bereitstellen, dass sie dem Produkt Ihres erwarteten Veröffentlichungsdurchsatzes und der Anzahl der Abos für Ihr Thema entspricht.

Die für ein einzelnes Thema bereitgestellte Publisher- und Abonnentenkapazität ist nicht austauschbar. Aus diesem Grund empfehlen wir immer die Verwendung von Reservierungen.

Es gibt Unterschiede bei der Abrechnung, wenn Kapazität direkt für Themen bereitgestellt wird, anstatt Reservierungen zu verwenden. Weitere Informationen finden Sie auf der Preisseite für Pub/Sub Lite.

Lite-Reservierung erstellen

Eine Lite-Reservierung muss sich im selben Projekt und in derselben Region wie alle damit verbundenen Lite-Themen befinden. Eine Liste der verfügbaren Zonen und Regionen finden Sie unter Pub/Sub Lite-Standorte.

Sie können eine Lite-Reservierung mit der Google Cloud Console, der Google Cloud CLI oder der Pub/Sub Lite API erstellen.

Console

  1. Rufen Sie die Seite Lite-Reservierungen auf.

    Lite-Reservierungen aufrufen

  2. Klicken Sie auf Lite-Reservierung erstellen.

  3. Wählen Sie eine Region aus.

  4. Geben Sie eine Lite-Reservierungs-ID ein.

  5. Stellen Sie die Anzahl der Durchsatzkapazitätseinheiten bereit.

  6. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie zum Erstellen eines Lite-Themas den Befehl 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

Einfach loslegen (Go)

Folgen Sie der Einrichtungsanleitung für Go in Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Java unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Python unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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.")

Lite-Reservierung aktualisieren

Sie können die Anzahl der für eine Lite-Reservierung konfigurierten Kapazitätseinheiten aktualisieren.

Sie können eine Lite-Reservierung mit der Google Cloud Console, der Google Cloud CLI oder der Pub/Sub Lite API aktualisieren.

Console

  1. Rufen Sie die Seite Lite-Reservierungen auf.

    Lite-Reservierungen aufrufen

  2. Klicken Sie auf die Lite-Reservierungs-ID.

  3. Klicken Sie auf der Seite "Details zu Lite-Reservierungen" auf Bearbeiten.

gcloud

Verwenden Sie den Befehl gcloud pubsub lite-reservations update, um eine Lite-Reservierung zu aktualisieren:

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

Ersetzen Sie Folgendes:

  • RESERVATION_ID: die ID der Lite-Reservierung
  • REGION: die Region der Reservierung
  • THROUGHPUT_CAPACITY: Die Durchsatzkapazität für Reservierungen.

Einfach loslegen (Go)

Folgen Sie der Einrichtungsanleitung für Go in Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Java unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Python unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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.")

Details zu Lite-Reservierungen abrufen

Mit der Google Cloud Console, der Google Cloud CLI oder der Pub/Sub Lite API können Sie Details zu einer Lite-Reservierung abrufen.

Console

  1. Rufen Sie die Seite Lite-Reservierungen auf.

    Lite-Reservierungen aufrufen

  2. Klicken Sie auf die Lite-Reservierungs-ID.

gcloud

Mit dem Befehl gcloud pubsub lite-reservations describe können Sie Details zu einer Lite-Reservierung abrufen:

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

Ersetzen Sie Folgendes:

  • RESERVATION_ID: die ID der Lite-Reservierung
  • REGION: die Region der Reservierung

Einfach loslegen (Go)

Folgen Sie der Einrichtungsanleitung für Go in Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Java unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Python unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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.")

Lite-Reservierungen auflisten

Console

gcloud

Verwenden Sie den Befehl gcloud pubsub lite-reservations list, um eine Liste der Lite-Reservierungen in einem Projekt aufzurufen:

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

Ersetzen Sie Folgendes:

  • REGION: die Region der Reservierung

Einfach loslegen (Go)

Folgen Sie der Einrichtungsanleitung für Go in Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Java unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Python unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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.")

Lite-Reservierung löschen

Sie können Lite-Reservierungen mit der Google Cloud Console, der Google Cloud CLI oder der Pub/Sub Lite API löschen. Eine Reservierung darf keine Themen enthalten, damit sie gelöscht werden kann. Sie können vorhandene Themen mit einer anderen Reservierung verknüpfen und dann die Reservierung löschen.

Console

  1. Rufen Sie die Seite Lite-Reservierungen auf.

    Lite-Reservierungen aufrufen

  2. Klicken Sie auf die Lite-Reservierungs-ID.

  3. Klicken Sie auf der Seite "Details zu Lite-Reservierungen" auf Löschen.

  4. Klicken Sie im angezeigten Dialogfeld auf Löschen, um zu bestätigen, dass Sie das Lite-Abo löschen möchten.

gcloud

Verwenden Sie den Befehl gcloud pubsub lite-reservations delete, um eine Lite-Reservierung zu löschen:

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

Ersetzen Sie Folgendes:

  • RESERVATION_ID: die ID der Lite-Reservierung
  • REGION: die Region der Reservierung

Einfach loslegen (Go)

Folgen Sie der Einrichtungsanleitung für Go in Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Java unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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

Folgen Sie der Einrichtungsanleitung für Python unter Pub/Sub Lite-Clientbibliotheken, bevor Sie dieses Beispiel ausführen.

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.")

Nächste Schritte