Membuat dan mengelola pemesanan Lite

Dokumen ini menjelaskan cara menggunakan dan mengelola reservasi Pub/Sub Lite. Dokumen ini juga menjelaskan konsep unit kapasitas dan cara menentukan jumlah yang diperlukan untuk mengakomodasi throughput aplikasi Anda.

Ringkasan reservasi Lite

Penyediaan reservasi Lite dan pembagian kapasitas throughput secara dinamis di antara satu atau beberapa topik Lite di suatu region. Topik ini dapat berupa topik Lite regional atau zona. Menggunakan reservasi Lite adalah opsi yang lebih baik daripada menetapkan kapasitas throughput setiap topik Lite. Dengan reservasi Lite, Anda dapat mengelola dan memantau lebih sedikit resource. Selain itu, Anda tidak perlu memilih kapasitas throughput setiap topik Lite.

Untuk menggunakan reservasi Lite, Anda melampirkan topik Lite yang berada di region yang sama dengan reservasi Lite tertentu. Anda dapat melampirkan satu reservasi Lite ke topik Lite zona dan regional. Semua partisi dalam topik Lite yang dikaitkan ke reservasi Lite menggunakan secara dinamis dari kapasitas throughput yang disediakan di reservasi Lite. Jika menentukan reservasi Lite untuk topik Lite, Anda juga dapat menyertakan batas kapasitas untuk membatasi kapasitas throughput setiap partisi topik Lite.

Ringkasan unit kapasitas

Kapasitas throughput reservasi Lite disediakan dalam unit kapasitas.

Satu unit kapasitas sesuai dengan throughput berikut:

Jenis topik Lite Throughput publikasi dalam MiBps Throughput langganan dalam MiBps
Zonal 1 2
Regional 0,25 0,5

Panduan untuk memberi nama reservasi

Nama resource Pub/Sub Lite secara unik mengidentifikasi resource Pub/Sub Lite, seperti topik, langganan, atau reservasi. Nama resource harus sesuai dengan format berikut:

projects/project-identifier/collection/ID

  • project-identifier: Harus berupa project ID atau nomor project, yang tersedia dari Konsol Google Cloud. Misalnya, my-cool-project adalah project ID. 123456789123 adalah nomor project.

  • collection: Harus salah satu dari topics, subscriptions, atau reservations.

  • ID: Harus mematuhi panduan berikut:

    • Tidak diawali dengan string goog
    • Diawali dengan huruf
    • Berisi antara 3 hingga 255 karakter
    • Hanya berisi karakter berikut: Huruf [A-Za-z], angka [0-9], tanda pisah -, garis bawah _, titik ., tanda gelombang ~, tanda tambah +, dan tanda persen %

    Anda dapat menggunakan karakter khusus dalam daftar sebelumnya dalam nama resource tanpa encoding URL. Namun, Anda harus memastikan bahwa karakter khusus lainnya dienkode atau didekode dengan benar saat Anda menggunakannya dalam URL. Misalnya, mi-tópico adalah ID yang tidak valid. Namun, mi-t%C3%B3pico valid. Format ini penting saat Anda melakukan panggilan REST.

Panduan untuk menggunakan reservasi Lite

Penyediaan throughput dengan reservasi Lite wajib untuk topik Lite regional dan opsional untuk topik Lite zona. Reservasi Lite adalah resource regional.

Perhatikan hal-hal berikut saat Anda berencana mengonfigurasi reservasi Lite:

  • Jumlah unit kapasitas yang diperlukan untuk reservasi Lite harus sama dengan throughput puncak yang Anda harapkan dalam menit tertentu di semua topik dan langganan dalam reservasi Lite tersebut.

  • Jika throughput gabungan semua topik Lite di reservasi Lite mencapai kapasitasnya, publikasi dan penayangan akan di-throttle. Server Pub/Sub Lite berhenti mengirim pesan ke klien, dan pesan akan di-buffer di klien penayang. Anda dapat menyiapkan pemberitahuan untuk reservation/throughput_capacity/utilization guna memberi tahu saat reservasi berisiko di-throttle sehingga Anda dapat meningkatkan ukuran reservasi.

  • Anda dapat memperbarui throughput reservasi sesering yang Anda inginkan. Perubahan akan diterapkan dalam waktu kurang dari satu menit. Namun, jika Anda mengurangi throughput reservasi, Anda akan terus dikenai biaya untuk jumlah yang lebih tinggi selama periode 24 jam. Pub/Sub Lite pada dasarnya merupakan sistem bayar sesuai kapasitas, yang memungkinkan peningkatan skala secara instan dan penurunan skala.

  • Semua topik Lite yang dikaitkan ke reservasi Lite menggunakan kumpulan kapasitas throughput yang sama. Oleh karena itu, topik Lite dapat tiba-tiba menggunakan kapasitas throughput yang besar, sehingga membuat topik Lite lainnya kekurangan dan mencegahnya memublikasikan atau menerima pesan. Jika memerlukan isolasi menyeluruh di seluruh topik Lite, Anda dapat melampirkannya ke reservasi independen.

Dampak partisi pada reservasi Lite

Jumlah total partisi di semua topik Lite dalam reservasi Lite tidak boleh lebih besar dari jumlah unit kapasitas yang direservasi. Misalnya, Anda tidak dapat menambahkan reservasi Lite sebanyak 10 unit kapasitas ke topik Lite atau sekumpulan topik Lite yang jumlah total partisi lebih besar dari 10.

Menghitung unit kapasitas untuk reservasi Lite

Ukuran reservasi Lite ditentukan oleh jumlah unit kapasitas. Contoh berikut menggambarkan cara memperkirakan kapasitas yang diperlukan untuk setiap topik Lite.

  1. Tentukan throughput publikasi puncak.

    Perkirakan puncak throughput semua topik Lite yang disertakan ke reservasi Lite. Perkiraan kasar untuk throughput sudah cukup karena Anda selalu dapat memperbarui ukuran reservasi.

  2. Tentukan throughput puncak berlangganan.

    Throughput langganan puncak dikomputasi mirip dengan throughput publikasi puncak. Namun, pertimbangkan bahwa pelanggan tidak perlu menerima pesan pada kecepatan penerbit yang tinggi. Jika penundaan dalam pemrosesan dapat diterima, Pub/Sub Lite memungkinkan Anda mem-buffer pesan dan memprosesnya dengan kecepatan yang stabil. Pada saat yang sama, Anda mungkin ingin memiliki lebih banyak kapasitas berlangganan daripada kapasitas publikasi untuk mengakomodasi periode nonaktif pelanggan yang sesekali.

  3. Menentukan jumlah total unit kapasitas yang diperlukan.

    Tabel di bagian sebelumnya menetapkan jumlah MiBps yang dapat diakomodasi oleh unit kapasitas untuk operasi yang berbeda. Berikut ini adalah formula untuk menghitung unit kapasitas yang diperlukan untuk sampel reservasi Lite:

    • Throughput publikasi puncak topik Lite zona = Pz MiBps
    • Throughput publikasi puncak topik Lite regional = Pr MiBps
    • Throughput langganan maksimum pada topik Lite di zona = Sz MiBps
    • Throughput langganan maksimum untuk topik Lite regional = Sr MiBps

      Jumlah unit kapasitas yang diperlukan = (Pz / 1 MiBps) + (Pr/0.25 MiBps) + (Sz/2 MiBps) + (Sr/0.5 MiBps)

      Jika angka tidak bulat, Anda harus membulatkan nilainya.

Mengonfigurasi kapasitas throughput tanpa reservasi Lite

  • Kapasitas throughput publikasi topik: Anda dapat menentukan 4 hingga 16 MiBps kapasitas throughput, dan nilainya harus berupa bilangan bulat.

  • Kapasitas throughput langganan topik: Anda dapat menentukan 4 hingga 32 MiBps kapasitas throughput, dan nilainya harus berupa bilangan bulat.

Untuk throughput langganan, sebaiknya sediakan kapasitas throughput yang sama dengan produk dari throughput publikasi yang diharapkan dan jumlah langganan pada topik Anda.

Kapasitas penerbit dan pelanggan yang disediakan untuk setiap topik tidak dapat dipertukarkan. Oleh karena itu, sebaiknya selalu gunakan reservasi.

Ada perbedaan dalam penagihan saat menyediakan kapasitas secara langsung untuk topik, bukan menggunakan reservasi. Lihat halaman harga Pub/Sub Lite untuk mengetahui detailnya.

Membuat reservasi Lite

Reservasi Lite harus berada dalam project dan region yang sama dengan topik Lite apa pun yang disertakan. Untuk daftar zona dan region yang tersedia, lihat lokasi Pub/Sub Lite.

Anda dapat membuat reservasi Lite dengan Konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API.

Konsol

  1. Buka halaman Reservasi Lite.

    Buka Reservasi Lite

  2. Klik Buat reservasi Lite.

  3. Pilih wilayah.

  4. Masukkan ID reservasi Lite.

  5. Sediakan jumlah unit kapasitas throughput.

  6. Klik Create.

gcloud

Untuk membuat reservasi Lite, gunakan perintah 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

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Go di Library Klien Pub/Sub Lite.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func createReservation(w io.Writer, projectID, region, reservationID string, throughputCapacity int) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	// throughputCapacity := 4
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	res, err := client.CreateReservation(ctx, pubsublite.ReservationConfig{
		Name:               reservationPath,
		ThroughputCapacity: throughputCapacity,
	})
	if err != nil {
		return fmt.Errorf("client.CreateReservation got err: %w", err)
	}
	fmt.Fprintf(w, "Created reservation: %s\n", res.Name)
	return nil
}

Java

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.

import com.google.api.gax.rpc.AlreadyExistsException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

public class CreateReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";
    // Each unit of throughput capacity supports up to 1 MiB/s of published messages or
    // 2 MiB/s of subscribed messages.
    int throughputCapacity = 4;

    createReservationExample(projectNumber, cloudRegion, reservationId, throughputCapacity);
  }

  public static void createReservationExample(
      long projectNumber, String cloudRegion, String reservationId, int throughputCapacity)
      throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationPath.toString())
            .setThroughputCapacity(throughputCapacity)
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation response = adminClient.createReservation(reservation).get();
      System.out.println(response.getAllFields() + " created successfully.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (AlreadyExistsException alreadyExists) {
        System.out.println("This reservation already exists.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

Python

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.

from google.api_core.exceptions import AlreadyExists
from google.cloud.pubsublite import AdminClient, Reservation
from google.cloud.pubsublite.types import CloudRegion, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"
# Each unit of throughput capacity supports up to 1 MiB/s of published messages
# or 2 MiB/s of subscribed messages. Must be a positive integer.
# throughput_capacity = 4

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

reservation = Reservation(
    name=str(reservation_path),
    throughput_capacity=throughput_capacity,
)

client = AdminClient(cloud_region)
try:
    response = client.create_reservation(reservation)
    print(f"{response.name} created successfully.")
except AlreadyExists:
    print(f"{reservation_path} already exists.")

Memperbarui reservasi Lite

Anda dapat memperbarui jumlah unit kapasitas yang dikonfigurasi untuk reservasi Lite.

Anda dapat memperbarui reservasi Lite dengan Konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API.

Konsol

  1. Buka halaman Reservasi Lite.

    Buka Reservasi Lite

  2. Klik ID reservasi Lite.

  3. Di halaman detail reservasi Lite, klik Edit.

gcloud

Untuk memperbarui reservasi Lite, gunakan perintah gcloud pubsub lite-reservations update:

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

Ganti kode berikut:

  • RESERVATION_ID: ID reservasi Lite
  • REGION: region reservasi
  • THROUGHPUT_CAPACITY: Kapasitas throughput reservasi.

Go

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Go di Library Klien Pub/Sub Lite.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func updateReservation(w io.Writer, projectID, region, reservationID string, throughputCapacity int) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation-id"
	// throughputCapacity := 8
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	config := pubsublite.ReservationConfigToUpdate{
		Name:               reservationPath,
		ThroughputCapacity: throughputCapacity,
	}
	updatedCfg, err := client.UpdateReservation(ctx, config)
	if err != nil {
		return fmt.Errorf("client.UpdateReservation got err: %w", err)
	}
	fmt.Fprintf(w, "Updated reservation: %#v\n", updatedCfg)
	return nil
}

Java

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.

import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

public class UpdateReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";
    // Each unit of throughput capacity supports up to 1 MiB/s of published messages or
    // 2 MiB/s of subscribed messages.
    int throughputCapacity = 8;

    updateReservationExample(projectNumber, cloudRegion, reservationId, throughputCapacity);
  }

  public static void updateReservationExample(
      long projectNumber, String cloudRegion, String reservationId, int throughputCapacity)
      throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    com.google.protobuf.FieldMask fieldMask =
        com.google.protobuf.FieldMask.newBuilder().addPaths("throughput_capacity").build();

    Reservation reservation =
        Reservation.newBuilder()
            .setName(reservationPath.toString())
            .setThroughputCapacity(throughputCapacity)
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation reservationBeforeUpdate = adminClient.getReservation(reservationPath).get();
      System.out.println("Before update: " + reservationBeforeUpdate.getAllFields());

      Reservation reservationAfterUpdate =
          adminClient.updateReservation(reservation, fieldMask).get();
      System.out.println("After update: " + reservationAfterUpdate.getAllFields());
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

Python

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient, Reservation
from google.cloud.pubsublite.types import CloudRegion, ReservationPath
from google.protobuf.field_mask_pb2 import FieldMask

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"
# Each unit of throughput capacity supports up to 1 MiB/s of published messages
# or 2 MiB/s of subscribed messages. Must be a positive integer.
# throughput_capacity = 8

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

# Defines which fields to update in the reservation.
field_mask = FieldMask(paths=["throughput_capacity"])

reservation = Reservation(
    name=str(reservation_path), throughput_capacity=throughput_capacity
)

client = AdminClient(cloud_region)
try:
    response = client.get_reservation(reservation_path)
    print(f"Before update: {response}")

    response = client.update_reservation(reservation, field_mask)
    print(f"After update: {response}")
except NotFound:
    print(f"{reservation_path} is not found.")

Dapatkan detail reservasi Lite

Anda bisa mendapatkan detail tentang reservasi Lite menggunakan Konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API.

Konsol

  1. Buka halaman Reservasi Lite.

    Buka Reservasi Lite

  2. Klik ID reservasi Lite.

gcloud

Untuk mendapatkan detail tentang reservasi Lite, gunakan perintah gcloud pubsub lite-reservations describe:

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

Ganti kode berikut:

  • RESERVATION_ID: ID reservasi Lite
  • REGION: region reservasi

Go

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Go di Library Klien Pub/Sub Lite.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func getReservation(w io.Writer, projectID, region, reservationID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	res, err := client.Reservation(ctx, reservationPath)
	if err != nil {
		return fmt.Errorf("client.Reservation got err: %w", err)
	}
	fmt.Fprintf(w, "Got reservation: %#v\n", res)
	return nil
}

Java

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.

import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.concurrent.ExecutionException;

public class GetReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";

    getReservationExample(projectNumber, cloudRegion, reservationId);
  }

  public static void getReservationExample(
      long projectNumber, String cloudRegion, String reservationId) throws Exception {
    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Reservation response = adminClient.getReservation(reservationPath).get();
      long throughputCapacity = response.getThroughputCapacity();
      System.out.println(
          response.getAllFields()
              + "\nhas "
              + throughputCapacity
              + " units of throughput capacity.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

Python

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

client = AdminClient(cloud_region)
try:
    response = client.get_reservation(reservation_path)
    print(
        f"{response.name} has {response.throughput_capacity} units of throughput capacity."
    )
except NotFound:
    print(f"{reservation_path} is not found.")

Mencantumkan reservasi Lite

Konsol

gcloud

Untuk melihat daftar reservasi Lite dalam sebuah project, gunakan perintah gcloud pubsub lite-reservations list:

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

Ganti kode berikut:

  • REGION: region reservasi

Go

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Go di Library Klien Pub/Sub Lite.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
	"google.golang.org/api/iterator"
)

func listReservations(w io.Writer, projectID, region string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, region)
	resIter := client.Reservations(ctx, parent)
	for {
		res, err := resIter.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("resIter.Next() got err: %w", err)
		}
		fmt.Fprintf(w, "Got reservation config: %v", res)
	}
	return nil
}

Java

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.

import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.LocationPath;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.proto.Reservation;
import java.util.List;

public class ListReservationsExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";

    listReservationsExample(projectNumber, cloudRegion);
  }

  public static void listReservationsExample(long projectNumber, String cloudRegion)
      throws Exception {

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    LocationPath locationPath =
        LocationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .build();

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      List<Reservation> reservations = adminClient.listReservations(locationPath).get();
      for (Reservation reservation : reservations) {
        System.out.println(reservation.getAllFields());
      }
      System.out.println(reservations.size() + " reservation(s) listed in " + locationPath + ".");
    }
  }
}

Python

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.

from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import LocationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"

location_path = LocationPath(project_number, cloud_region)

client = AdminClient(cloud_region)
response = client.list_reservations(location_path)

for reservation in response:
    print(reservation)

print(f"{len(response)} reservation(s) listed in your project and location.")

Menghapus reservasi Lite

Anda dapat menghapus reservasi Lite dengan Konsol Google Cloud, Google Cloud CLI, atau Pub/Sub Lite API. Untuk menghapus reservasi, reservasi tidak boleh berisi topik apa pun. Anda dapat melampirkan topik yang ada ke reservasi lain, lalu menghapus reservasi.

Konsol

  1. Buka halaman Reservasi Lite.

    Buka Reservasi Lite

  2. Klik ID reservasi Lite.

  3. Di halaman detail reservasi Lite, klik Delete.

  4. Pada dialog yang muncul, klik Delete untuk mengonfirmasi bahwa Anda ingin menghapus reservasi Lite.

gcloud

Untuk menghapus reservasi Lite, gunakan perintah gcloud pubsub lite-reservations delete:

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

Ganti kode berikut:

  • RESERVATION_ID: ID reservasi Lite
  • REGION: region reservasi

Go

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Go di Library Klien Pub/Sub Lite.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func deleteReservation(w io.Writer, projectID, region, reservationID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// reservationID := "my-reservation"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	reservationPath := fmt.Sprintf("projects/%s/locations/%s/reservations/%s", projectID, region, reservationID)
	err = client.DeleteReservation(ctx, reservationPath)
	if err != nil {
		return fmt.Errorf("client.DeleteReservation got err: %w", err)
	}
	fmt.Fprint(w, "Deleted reservation")
	return nil
}

Java

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Java di Library Klien Pub/Sub Lite.

import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import java.util.concurrent.ExecutionException;

public class DeleteReservationExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    long projectNumber = Long.parseLong("123456789");
    String cloudRegion = "your-cloud-region";
    String reservationId = "your-reservation-id";

    deleteReservationExample(projectNumber, cloudRegion, reservationId);
  }

  public static void deleteReservationExample(
      long projectNumber, String cloudRegion, String reservationId) throws Exception {

    ReservationPath reservationPath =
        ReservationPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudRegion.of(cloudRegion))
            .setName(ReservationName.of(reservationId))
            .build();

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();

    // If a reservation has topics attached, you must delete the topics before deleting
    // the reservation.
    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      adminClient.deleteReservation(reservationPath).get();
      System.out.println(reservationPath + " deleted successfully.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (NotFoundException notFound) {
        System.out.println("This reservation is not found.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

Python

Sebelum menjalankan contoh ini, ikuti petunjuk penyiapan Python di Library Klien Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, ReservationPath

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# reservation_id = "your-reservation-id"

cloud_region = CloudRegion(cloud_region)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)

client = AdminClient(cloud_region)
try:
    client.delete_reservation(reservation_path)
    print(f"{reservation_path} deleted successfully.")
except NotFound:
    print(f"{reservation_path} not found.")

Langkah selanjutnya