Lite-Reservierungen erstellen und verwalten

In diesem Dokument wird erläutert, wie Sie Pub/Sub Lite-Reservierungen verwenden und verwalten. In diesem Dokument wird auch das Konzept der Kapazitätseinheiten erläutert. Außerdem erfahren Sie, wie Sie ermitteln können, wie viele Kapazitäten erforderlich sind, um den Durchsatz Ihrer Anwendung zu bewältigen.

Lite-Reservierungen

Mit Lite-Reservierungen wird die Durchsatzkapazität dynamisch auf ein oder mehrere Lite-Themen in einer Region aufgeteilt. Diese Themen können regionale oder zonale Lite-Themen sein. Lite-Reservierungen sind besser, als die Durchsatzkapazität einzelner Lite-Themen festzulegen. Mit Lite-Reservierungen verwalten und überwachen Sie weniger Ressourcen. 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 entsprechende Lite-Reservierung an. Sie können sowohl zonalen als auch regionalen Lite-Themen eine einzelne Lite-Reservierung anhängen. Alle Partitionen in einem Lite-Thema, das mit einer Lite-Reservierung verknüpft ist, verbrauchen dynamisch die in der Lite-Reservierung bereitgestellte Durchsatzkapazität. Wenn Sie eine Lite-Reservierung für ein Lite-Thema angeben, können Sie auch Ratenlimits einschließen, um die Durchsatzkapazität jeder Partition des Lite-Themas zu begrenzen.

Übersicht über Kapazitätseinheiten

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

Eine Kapazitätseinheit entspricht folgendem Durchsatz:

Lite-Thementyp Veröffentlichungsdurchsatz in MiBps Abodurchsatz in MiBps
Zonal 1 2
Regional 0,25 0,5

Richtlinien für die Benennung von Reservierungen

Ein Pub/Sub Lite-Ressourcenname identifiziert 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 sein, die in der Google Cloud Console verfügbar ist. my-cool-project ist beispielsweise 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 in der vorherigen Liste in Ressourcennamen ohne URL-Codierung verwenden. Alle anderen Sonderzeichen müssen jedoch bei ihrer Verwendung in URLs richtig codiert oder decodiert werden. Beispielsweise ist mi-tópico eine ungültige ID. mi-t%C3%B3pico ist jedoch gültig. Dieses Format ist wichtig, wenn Sie REST-Aufrufe durchfü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 benötigten 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 die Nachrichten werden im Publisher-Client zwischengespeichert. Sie können eine Benachrichtigung für reservation/throughput_capacity/utilization einrichten, um Sie zu informieren, wenn die Reservierung möglicherweise gedrosselt wird, sodass Sie die Reservierungsgröße erhöhen können.

  • Sie können den Durchsatz der Reservierungen beliebig oft aktualisieren. Änderungen werden in weniger als einer Minute wirksam. Wenn Sie jedoch den Durchsatz einer Reservierung verringern, wird Ihnen für einen Zeitraum von 24 Stunden weiterhin der höhere Betrag in Rechnung gestellt. Pub/Sub Lite ist von Natur aus ein nutzungsbasiertes System, bei dem Hoch- und Herunterskalieren möglich ist.

  • Alle Lite-Themen, die an eine Lite-Reservierung angehängt sind, verbrauchen denselben Pool an Durchsatzkapazität. Daher ist es möglich, dass ein Lite-Thema plötzlich eine hohe Durchsatzkapazität belegt, andere Lite-Themen ausbremst und sie daran hindert, Nachrichten zu veröffentlichen oder zu empfangen. Wenn Sie eine vollständige Isolierung über Lite-Themen hinweg benötigen, können Sie sie an unabhängige Reservierungen anhängen.

Auswirkungen von Partitionen auf eine Lite-Reservierung

Die Gesamtzahl der Partitionen in allen 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 mit 10 Kapazitätseinheiten an ein Lite-Thema oder eine Reihe von Lite-Themen anhängen, deren Gesamtzahl der Partitionen größer als 10 ist.

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 veranschaulichen, wie Sie die für einzelne Lite-Themen erforderliche Kapazität schätzen.

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

    Schätzen Sie den Höchstwert des Durchsatzes aller Lite-Themen, die mit der Lite-Reservierung verknüpft sind. Eine grobe Schätzung für den Durchsatz reicht aus, da Sie die Größe der Reservierung jederzeit aktualisieren können.

  2. Bestimmen Sie den Spitzendurchsatz für Abos.

    Der Spitzendurchsatz für Abos wird ähnlich wie der Spitzendurchsatz für Veröffentlichungen berechnet. Beachten Sie jedoch, dass Ihre Abonnenten nicht unbedingt die meisten Nachrichten der Publisher empfangen müssen. Wenn Verzögerungen bei der Verarbeitung akzeptabel sind, können Sie mit Pub/Sub Lite Nachrichten zwischenspeichern und mit einer konstanten Geschwindigkeit verarbeiten. Gleichzeitig kann es sinnvoll sein, mehr Abonnentenkapazität als Veröffentlichungskapazität anzugeben, um gelegentliche Ausfallzeiten von Abonnenten zu berücksichtigen.

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

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

    • 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 nicht eine ganze Zahl ist, müssen Sie den Wert aufrunden.

Durchsatzkapazität ohne Lite-Reservierung konfigurieren

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

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

Für den Abodurchsatz empfehlen wir, Ihre Durchsatzkapazität so bereitzustellen, 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.

Bei der Abrechnung gibt es Unterschiede, wenn Kapazitäten für Themen direkt bereitgestellt werden, 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 befinden wie alle Lite-Themen, die damit verknüpft sind. 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)

Bevor Sie dieses Beispiel ausführen, folgen Sie der Einrichtungsanleitung für Go unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Java unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Python unter Pub/Sub Lite-Clientbibliotheken.

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 bei der Reservierung.

Einfach loslegen (Go)

Bevor Sie dieses Beispiel ausführen, folgen Sie der Einrichtungsanleitung für Go unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Java unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Python unter Pub/Sub Lite-Clientbibliotheken.

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 zur Lite-Reservierung abrufen

Sie können Details zu einer Lite-Reservierung über die Google Cloud Console, die Google Cloud CLI oder die Pub/Sub Lite API 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)

Bevor Sie dieses Beispiel ausführen, folgen Sie der Einrichtungsanleitung für Go unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Java unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Python unter Pub/Sub Lite-Clientbibliotheken.

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)

Bevor Sie dieses Beispiel ausführen, folgen Sie der Einrichtungsanleitung für Go unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Java unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Python unter Pub/Sub Lite-Clientbibliotheken.

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. Wenn Sie eine Reservierung löschen möchten, darf sie keine Themen enthalten. 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)

Bevor Sie dieses Beispiel ausführen, folgen Sie der Einrichtungsanleitung für Go unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Java unter Pub/Sub Lite-Clientbibliotheken.

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

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Python unter Pub/Sub Lite-Clientbibliotheken.

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