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 und wie Sie ermitteln, wie viele Sie für den Durchsatz Ihrer Anwendung benötigen.

Lite-Reservierungen – Übersicht

Mit Lite-Reservierungen wird Durchsatzkapazität für ein oder mehrere Lite-Themen in einer Region bereitgestellt und dynamisch aufgeteilt. Diese Themen können regionale oder zonale Lite-Themen sein. Die Verwendung von Lite-Reservierungen ist eine bessere Option als die Festlegung der Durchsatzkapazität einzelner Lite-Themen. Bei Lite-Reservierungen müssen Sie weniger Ressourcen verwalten und überwachen. Außerdem müssen Sie nicht die Durchsatzkapazität einzelner Lite-Themen auswählen.

Wenn Sie eine Lite-Reservierung verwenden möchten, hängen Sie der entsprechenden Lite-Reservierung ein Lite-Thema an, das sich in derselben Region befindet. Sie können eine einzelne Lite-Reservierung sowohl an zonale als auch an regionale Lite-Themen anhängen. Alle Partitionen in einem Lite-Thema, das mit einer Lite-Reservierung verknüpft ist, belegen dynamisch die in der Lite-Reservierung bereitgestellte Durchsatzkapazität. Wenn Sie eine Lite-Reservierung für ein Lite-Thema angeben, können Sie auch Taktlimits angeben, 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:

Art des Lite-Themas 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 wie ein Thema, Abo oder Reservierung eindeutig. Der Ressourcenname muss folgendermaßen formatiert sein:

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: Sie müssen den folgenden Richtlinien entsprechen:

    • Beginnen Sie nicht mit der Zeichenfolge goog.
    • Muss mit einem Buchstaben beginnen
    • Er muss zwischen 3 und 255 Zeichen lang sein
    • Er darf nur die folgenden Zeichen enthalten: Buchstaben [A-Za-z], Zahlen [0-9], Bindestriche -, Unterstriche _, Punkte ., Tilden ~, Pluszeichen + und Prozentzeichen %.

    Die Sonderzeichen in der obigen Liste können in Ressourcennamen ohne URL-Codierung verwendet werden. Sie müssen jedoch sicherstellen, dass alle anderen Sonderzeichen bei der Verwendung in URLs richtig codiert oder decodiert werden. Beispiel: mi-tópico ist eine ungü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 erwarteten Spitzendurchsatz in einer bestimmten Minute für alle Themen und Abos in dieser Lite-Reservierung entsprechen.

  • Wenn der kombinierte Durchsatz aller Lite-Themen in einer Lite-Reservierung die Kapazität erreicht, werden die 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 für reservation/throughput_capacity/utilization eine Benachrichtigung einrichten, damit Sie informiert werden, wenn die Reservierung gedrosselt wird, damit Sie die Reservierungsgröße erhöhen können.

  • Sie können den Durchsatz der Reservierungen beliebig oft aktualisieren. Die Änderungen werden innerhalb weniger Minuten wirksam. Wenn Sie den Durchsatz einer Reservierung jedoch senken, werden Ihnen 24 Stunden lang weiterhin die höheren Kosten in Rechnung gestellt. Pub/Sub Lite ist ein Pay-per-Capacity-System, bei dem eine sofortige Skalierung möglich ist.

  • Alle Lite-Themen, die mit einer Lite-Reservierung verknüpft sind, nutzen denselben Durchsatzkapazitätspool. Daher kann ein Lite-Thema plötzlich eine große Menge an Durchsatzkapazität verbrauchen, was andere Lite-Themen ausbremst und sie daran hindert, Nachrichten zu veröffentlichen oder zu empfangen. Wenn Sie eine vollständige Isolierung zwischen Lite-Themen benötigen, können Sie sie unabhängigen Reservierungen zuordnen.

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 mit 10 Kapazitätseinheiten mit einem Lite-Thema oder einer Gruppe von Lite-Themen verknüpfen, deren Gesamtzahl an Partitionen mehr als 10 beträgt.

Kapazitätseinheiten für eine Lite-Reservierung berechnen

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

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

    Schätzen Sie den Spitzendurchsatz aller Lite-Themen ab, die mit der Lite-Reservierung verknüpft sind. Eine grobe Schätzung des Durchsatzes ist ausreichend, 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. Ihre Abonnenten müssen jedoch nicht unbedingt Nachrichten mit der Spitzenrate der Publisher erhalten. Wenn Verzögerungen bei der Verarbeitung akzeptabel sind, können Sie mit Pub/Sub Lite Nachrichten puffern und mit einer konstanten Rate verarbeiten. Gleichzeitig sollten Sie die Abokapazität höher ansetzen als die Veröffentlichungskapazität, um gelegentliche Ausfälle von Abonnenten zu berücksichtigen.

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

    In der Tabelle im vorherigen Abschnitt wird die Anzahl der MiBps angegeben, die eine Kapazitätseinheit für verschiedene Vorgänge aufnehmen kann. Mit der folgenden Formel können Sie die für eine Lite-Reservierung erforderlichen Kapazitätseinheiten berechnen:

    • 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

      Erforderliche Anzahl von 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 die Veröffentlichung 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.

Wir empfehlen, dass Sie Ihre Durchsatzkapazität so bereitstellen, dass sie dem Produkt des 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 Sie Kapazitäten für Themen direkt bereitstellen, anstatt Reservierungen zu verwenden. Weitere Informationen finden Sie auf der Seite Pub/Sub Lite-Preise.

Lite-Reservierung erstellen

Eine Lite-Reservierung muss sich im selben Projekt und in derselben Region wie alle Lite-Themen befinden, die an sie angehängt 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.

    Zu „Lite-Reservierungen“

  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

Go

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in 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 den Schritten zur Einrichtung von Java in 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 den Schritten zur Einrichtung von Java in 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 Kapazitätseinheiten aktualisieren, die für eine Lite-Reservierung konfiguriert sind.

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.

    Zu Lite-Reservierungen

  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

Dabei gilt:

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

Go

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in 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 den Schritten zur Einrichtung von Java in 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 den Schritten zur Einrichtung von Java in 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 zu Lite-Reservierungen abrufen

Details zu einer Lite-Reservierung erhalten Sie über die Google Cloud Console, die Google Cloud CLI oder die Pub/Sub Lite API.

Console

  1. Rufen Sie die Seite Lite-Reservierungen auf.

    Zu „Lite-Reservierungen“

  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

Dabei gilt:

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

Go

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in 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 den Schritten zur Einrichtung von Java in 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 den Schritten zur Einrichtung von Java in 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

Dabei gilt:

  • REGION: die Region der Reservierung

Go

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in 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 den Schritten zur Einrichtung von Java in 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 den Schritten zur Einrichtung von Java in 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. Damit eine Reservierung gelöscht werden kann, 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.

    Zu Lite-Reservierungen

  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

Dabei gilt:

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

Go

Bevor Sie dieses Beispiel ausführen, folgen Sie der Anleitung zur Einrichtung von Go in 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 den Schritten zur Einrichtung von Java in 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 den Schritten zur Einrichtung von Java in 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