Perbarui periode retensi, faktor penskalaan (kapasitas throughput), dan byte per partisi (kapasitas penyimpanan) untuk topik Lite.
Jelajahi lebih lanjut
Untuk dokumentasi mendetail yang menyertakan contoh kode ini, lihat artikel berikut:
Contoh kode
Go
Untuk melakukan autentikasi ke Pub/Sub Lite, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
import (
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/pubsublite"
)
func updateTopic(w io.Writer, projectID, region, location, topicID, reservation string) error {
// projectID := "my-project-id"
// region := "us-central1"
// NOTE: location can be either a region ("us-central1") or a zone ("us-central1-a")
// For a list of valid locations, see https://cloud.google.com/pubsub/lite/docs/locations.
// location := "us-central1"
// topicID := "my-topic"
// reservation := "projects/my-project-id/reservations/my-reservation"
ctx := context.Background()
client, err := pubsublite.NewAdminClient(ctx, region)
if err != nil {
return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
}
defer client.Close()
topicPath := fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, location, topicID)
// For ranges of fields in TopicConfigToUpdate, see https://pkg.go.dev/cloud.google.com/go/pubsublite/#TopicConfigToUpdate
config := pubsublite.TopicConfigToUpdate{
Name: topicPath,
PartitionCount: 3, // Partition count cannot decrease.
PublishCapacityMiBPerSec: 8,
SubscribeCapacityMiBPerSec: 16,
PerPartitionBytes: 60 * 1024 * 1024 * 1024,
RetentionDuration: 24 * time.Hour,
ThroughputReservation: reservation,
}
updatedCfg, err := client.UpdateTopic(ctx, config)
if err != nil {
return fmt.Errorf("client.UpdateTopic got err: %w", err)
}
fmt.Fprintf(w, "Updated topic: %v\n", updatedCfg)
return nil
}
Java
Untuk melakukan autentikasi ke Pub/Sub Lite, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
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.CloudRegionOrZone;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.ReservationName;
import com.google.cloud.pubsublite.ReservationPath;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig;
import com.google.cloud.pubsublite.proto.Topic.PartitionConfig.Capacity;
import com.google.cloud.pubsublite.proto.Topic.ReservationConfig;
import com.google.cloud.pubsublite.proto.Topic.RetentionConfig;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.Durations;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
public class UpdateTopicExample {
public static void main(String... args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String cloudRegion = "your-cloud-region";
char zoneId = 'b';
String topicId = "your-topic-id";
String reservationId = "your-reservation-id";
long projectNumber = Long.parseLong("123456789");
// True if using a regional location. False if using a zonal location.
// https://cloud.google.com/pubsub/lite/docs/topics
boolean regional = true;
updateTopicExample(cloudRegion, zoneId, projectNumber, topicId, reservationId, regional);
}
public static void updateTopicExample(
String cloudRegion,
char zoneId,
long projectNumber,
String topicId,
String reservationId,
boolean regional)
throws Exception {
CloudRegionOrZone location;
if (regional) {
location = CloudRegionOrZone.of(CloudRegion.of(cloudRegion));
} else {
location = CloudRegionOrZone.of(CloudZone.of(CloudRegion.of(cloudRegion), zoneId));
}
TopicPath topicPath =
TopicPath.newBuilder()
.setProject(ProjectNumber.of(projectNumber))
.setLocation(location)
.setName(TopicName.of(topicId))
.build();
ReservationPath reservationPath =
ReservationPath.newBuilder()
.setProject(ProjectNumber.of(projectNumber))
.setLocation(CloudRegion.of(cloudRegion))
.setName(ReservationName.of(reservationId))
.build();
Iterable<String> iterablePaths =
Arrays.asList(
"partition_config.scale",
"retention_config.per_partition_bytes",
"retention_config.period",
"reservation_config.throughput_reservation");
FieldMask fieldMask = FieldMask.newBuilder().addAllPaths(iterablePaths).build();
Topic topic =
Topic.newBuilder()
.setPartitionConfig(
PartitionConfig.newBuilder()
.setCapacity(
Capacity.newBuilder()
.setPublishMibPerSec(16)
.setSubscribeMibPerSec(32)
.build())
.build())
.setRetentionConfig(
RetentionConfig.newBuilder()
// Set storage per partition to 32 GiB. This must be 30 GiB-10 TiB.
// If the number of bytes stored in any of the topic's partitions grows
// beyond this value, older messages will be dropped to make room for
// newer ones, regardless of the value of `period`.
// Be careful when decreasing storage per partition as it may cause
// lost messages.
.setPerPartitionBytes(32 * 1024 * 1024 * 1024L)
.setPeriod(Durations.fromDays(7)))
.setReservationConfig(
ReservationConfig.newBuilder()
.setThroughputReservation(reservationPath.toString())
.build())
.setName(topicPath.toString())
.build();
AdminClientSettings adminClientSettings =
AdminClientSettings.newBuilder().setRegion(CloudRegion.of(cloudRegion)).build();
try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
Topic topicBeforeUpdate = adminClient.getTopic(topicPath).get();
System.out.println("Before update: " + topicBeforeUpdate.getAllFields());
Topic topicAfterUpdate = adminClient.updateTopic(topic, fieldMask).get();
System.out.println("After update: " + topicAfterUpdate.getAllFields());
} catch (ExecutionException e) {
try {
throw e.getCause();
} catch (NotFoundException notFound) {
System.out.println("This topic is not found.");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
}
Python
Untuk melakukan autentikasi ke Pub/Sub Lite, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import (
CloudRegion,
CloudZone,
ReservationPath,
TopicPath,
)
from google.protobuf.duration_pb2 import Duration
from google.protobuf.field_mask_pb2 import FieldMask
# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"
# reservation_id = "your-reservation-id"
# regional = True
location = None
if regional:
# A region.
location = CloudRegion(cloud_region)
else:
# A zone.
location = CloudZone(CloudRegion(cloud_region), zone_id)
topic_path = TopicPath(project_number, location, topic_id)
reservation_path = ReservationPath(project_number, cloud_region, reservation_id)
# Defines which topic fields to update.
field_mask = FieldMask(
paths=[
"partition_config.capacity",
"retention_config.per_partition_bytes",
"retention_config.period",
"reservation_confing.throughput_reservation",
]
)
# Defines how to update the topic fields.
topic = Topic(
name=str(topic_path),
partition_config=Topic.PartitionConfig(
capacity=Topic.PartitionConfig.Capacity(
publish_mib_per_sec=16,
subscribe_mib_per_sec=32,
)
),
retention_config=Topic.RetentionConfig(
# Set storage per partition to 32 GiB. This must be in the range 30 GiB-10TiB.
# If the number of byptes stored in any of the topic's partitions grows beyond
# this value, older messages will be dropped to make room for newer ones,
# regardless of the value of `period`.
# Be careful when decreasing storage per partition as it may cuase lost messages.
per_partition_bytes=32 * 1024 * 1024 * 1024,
# Allow messages to be stored for 14 days.
period=Duration(seconds=60 * 60 * 24 * 14),
),
reservation_config=Topic.ReservationConfig(
throughput_reservation=str(reservation_path),
),
)
client = AdminClient(cloud_region)
try:
response = client.update_topic(topic, field_mask)
print(f"{response.name} updated successfully.")
except NotFound:
print(f"{topic_path} not found.")
Langkah selanjutnya
Untuk menelusuri dan memfilter contoh kode untuk produk Google Cloud lainnya, lihat browser contoh Google Cloud.