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 Anda perlukan untuk mengakomodasi throughput aplikasi Anda.

Ringkasan pemesanan Lite

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

Untuk menggunakan pemesanan Lite, Anda harus melampirkan topik Lite yang berada di region yang sama ke pemesanan Lite tertentu. Anda dapat melampirkan satu pemesanan Lite ke topik Lite zonal dan regional. Semua partisi dalam topik Lite yang dilampirkan ke pemesanan Lite secara dinamis menggunakan kapasitas throughput yang disediakan dalam pemesanan Lite. Jika Anda menentukan pemesanan Lite untuk topik Lite, Anda juga dapat menyertakan batas kapasitas untuk membatasi kapasitas throughput setiap partisi topik Lite.

Ringkasan unit kapasitas

Kapasitas throughput pemesanan 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 pemesanan

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 hubung -, garis bawah _, titik ., tanda gelombang ~, tanda tambah +, dan tanda persen %

    Anda dapat menggunakan karakter khusus dalam daftar sebelumnya di nama resource tanpa encoding URL. Namun, Anda harus memastikan bahwa karakter khusus lainnya dienkode atau didekode dengan benar saat Anda menggunakannya di 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 pemesanan Lite

Penyediaan throughput dengan pemesanan Lite diperlukan untuk topik Lite di level regional dan opsional untuk topik Lite di level zona. Pemesanan Lite adalah resource regional.

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

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

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

  • 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 ditagih untuk jumlah yang lebih tinggi selama periode 24 jam. Pub/Sub Lite pada dasarnya adalah sistem bayar sesuai kapasitas, dengan peningkatan kapasitas yang instan dan penurunan kapasitas yang memungkinkan.

  • Semua topik Lite yang dilampirkan ke pemesanan Lite menggunakan kapasitas throughput dari kumpulan yang sama. Oleh karena itu, topik Lite dapat tiba-tiba menggunakan kapasitas throughput dalam jumlah besar, sehingga topik Lite lainnya tidak dapat memublikasikan atau menerima pesan. Jika memerlukan isolasi lengkap di seluruh topik Lite, Anda dapat melampirkan topik tersebut ke pemesanan independen.

Pengaruh partisi pada pemesanan Lite

Jumlah total partisi di seluruh topik Lite dalam pemesanan Lite tidak boleh lebih besar dari jumlah unit kapasitas yang dipesan. Misalnya, Anda tidak dapat melampirkan pemesanan Lite sebesar 10 unit kapasitas ke topik Lite atau sekumpulan topik Lite yang jumlah total partisinya lebih besar dari 10.

Menghitung unit kapasitas untuk pemesanan Lite

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

  1. Tentukan throughput publikasi puncak.

    Estimasi puncak throughput semua topik Lite yang dilampirkan ke pemesanan Lite. Estimasi kasar untuk throughput sudah memadai karena Anda selalu dapat memperbarui ukuran reservasi.

  2. Tentukan throughput langganan puncak.

    Throughput langganan puncak dihitung dengan cara yang sama seperti throughput publikasi puncak. Namun, pertimbangkan bahwa subscriber Anda tidak perlu menerima pesan pada kapasitas puncak penayang. Jika penundaan pemrosesan dapat diterima, Pub/Sub Lite memungkinkan Anda melakukan buffering pesan dan memprosesnya dengan kecepatan yang stabil. Pada saat yang sama, Anda mungkin ingin memiliki lebih banyak kapasitas subscribe daripada kapasitas publikasi untuk mengakomodasi periode nonaktif subscriber yang sesekali terjadi.

  3. Tentukan jumlah total unit kapasitas yang diperlukan.

    Tabel di bagian sebelumnya menentukan jumlah MiBps yang dapat ditampung unit kapasitas untuk berbagai operasi. Berikut adalah rumus untuk menghitung unit kapasitas yang diperlukan untuk contoh pemesanan Lite:

    • Throughput publikasi puncak topik Lite di level Zona = Pz MiBps
    • Throughput publikasi puncak topik Lite regional = Pr MiBps
    • Throughput langganan puncak topik Lite di level zona = Sz MiBps
    • Throughput langganan puncak 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 angkanya bukan bilangan bulat, Anda harus membulatkan nilainya ke atas.

Mengonfigurasi kapasitas throughput tanpa pemesanan Lite

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

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

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

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

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

Membuat pemesanan Lite

Pemesanan Lite harus berada di project dan region yang sama dengan topik Lite yang terlampir. Untuk mengetahui 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 Pemesanan Lite.

    Buka Pemesanan Lite

  2. Klik Create Lite reservation.

  3. Pilih wilayah.

  4. Masukkan ID reservasi Lite.

  5. Sediakan jumlah unit kapasitas throughput.

  6. Klik Create.

gcloud

Untuk membuat pemesanan 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 pemesanan Lite

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

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

Konsol

  1. Buka halaman Pemesanan Lite.

    Buka Pemesanan Lite

  2. Klik ID pemesanan Lite.

  3. Di halaman detail reservasi Lite, klik Edit.

gcloud

Untuk memperbarui pemesanan 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 pemesanan Lite
  • REGION: region pemesanan
  • 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.")

Mendapatkan 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 Pemesanan Lite.

    Buka Pemesanan Lite

  2. Klik ID pemesanan 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 pemesanan Lite
  • REGION: region pemesanan

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 pemesanan Lite

Konsol

gcloud

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

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

Ganti kode berikut:

  • REGION: region pemesanan

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 pemesanan Lite

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

Konsol

  1. Buka halaman Pemesanan Lite.

    Buka Pemesanan Lite

  2. Klik ID pemesanan Lite.

  3. Di halaman detail reservasi Lite, klik Hapus.

  4. Pada dialog yang muncul, klik Hapus untuk mengonfirmasi bahwa Anda ingin menghapus pemesanan Lite.

gcloud

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

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

Ganti kode berikut:

  • RESERVATION_ID: ID pemesanan Lite
  • REGION: region pemesanan

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