Cette page a été traduite par l'API Cloud Translation.
Switch to English

Créer et gérer des sujets Lite

Cette page explique comment créer, afficher et supprimer des sujets Lite.

Les sujets Lite sont des ressources zonales dans lesquelles vous pouvez publier des messages. Lorsque vous créez un sujet Lite, vous devez spécifier une zone dans laquelle stocker les messages.

Après avoir créé un sujet Lite, vous pouvez publier des messages dans le sujet Lite, créer un abonnement Lite au sujet Lite et recevoir des messages de l'abonnement Lite.

Créer des sujets Lite

Lorsque vous créez un sujet Lite, vous devez définir son débit et sa capacité de stockage. Le nombre et la capacité de partitions déterminent la capacité d'un sujet Lite.

Les sujets Lite ont les propriétés suivantes:

  • Nombre de partitions : nombre de partitions dans le sujet Lite.
  • Stockage par partition : quantité d'espace de stockage, en octets, pour chaque partition. Vous pouvez spécifier entre 30 Gio et 10 Tio de stockage.
  • Capacité de débit de la publication: débit de publication maximal de chaque partition. Vous pouvez spécifier une capacité de débit de 4 à 16 Mio par seconde, et la valeur doit être un nombre entier. Pour de meilleurs résultats, créez un sujet Lite avec le débit de publication minimal. Si le trafic augmente, mettez à jour le sujet Lite et augmentez le débit de publication.
  • Capacité de débit d'abonnement : débit maximal d'abonnement de chaque partition. Vous pouvez spécifier une capacité de débit de 4 à 32 Mio par seconde, et la valeur doit être un nombre entier.

  • Durée de conservation des messages: durée maximale pendant laquelle un sujet Lite stocke des messages. Si vous ne spécifiez pas de durée de conservation des messages, le sujet Lite stocke les messages jusqu'à ce que vous dépassiez la capacité de stockage.

Vous pouvez créer des sujets Lite avec Cloud Console, l'outil de ligne de commande gcloud ou l'API Pub/Sub Lite.

Console

  1. Dans Cloud Console, accédez à la page Sujets Lite.

    Accéder à la page Sujets Lite

  2. Cliquez sur Créer un sujet Lite.

  3. Sélectionnez une région et une zone dans cette région.

  4. Dans la section Nom, saisissez un ID de sujet Lite. Le nom du sujet Lite inclut l'ID du sujet Lite, la zone et le numéro du projet.

  5. Dans la section Débit, saisissez le nombre de partitions à provisionner pour la partition.

  6. Dans la section Stockage des messages, saisissez le stockage par partition.

  7. Facultatif: dans la section Conservation des messages, sélectionnez Supprimer les messages après la durée spécifiée, même s'il reste de l'espace de stockage disponible, puis saisissez une durée de conservation.

  8. Cliquez sur Créer.

gcloud

Pour créer un sujet Lite, utilisez la commande gcloud pubsub lite-topics create :

gcloud pubsub lite-topics create TOPIC_ID \
  --zone=ZONE \
  --partitions=NUMBER_OF_PARTITIONS \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  [--message-retention-period=MESSAGE_RETENTION_PERIOD]

Remplacez l'élément suivant :

  • TOPIC_ID : ID du sujet Lite

  • ZONE : le nom d'une zone compatible avec Pub/Sub Lite

  • NUMBER_OF_PARTITIONS: un entier représentant le nombre de partitions dans le sujet Lite

  • STORAGE_PER_PARTITION : quantité de stockage pour chaque partition, par exemple 30GiB

  • MESSAGE_RETENTION_PERIOD : durée pendant laquelle le sujet Lite stocke des messages, tels que 1d ou 2w.

Si la requête aboutit, la ligne de commande affiche une confirmation :

Created [TOPIC_ID].

Protocole

Pour créer un sujet Lite, envoyez une requête POST comme suit :

POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Remplacez l'élément suivant :

Spécifiez les champs suivants dans le corps de la requête :

{
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

Remplacez l'élément suivant :

  • NUMBER_OF_PARTITIONS: un entier représentant le nombre de partitions dans le sujet Lite

  • STORAGE_PER_PARTITION : quantité de stockage pour chaque partition, par exemple 30GiB

  • PUBLISHING_CAPACITY : entier correspondant à la capacité de débit de publication de chaque partition

  • SUBSCRIBING_CAPACITY : entier correspondant à la capacité de débit d'abonnement de chaque partition

  • MESSAGE_RETENTION_PERIOD : durée pendant laquelle le sujet Lite stocke des messages, tels que 1d ou 2w.

Si la requête aboutit, la réponse est le sujet Lite au format JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
       "count": NUMBER_OF_PARTITIONS,
       "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
       }
  },
  "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
  },
}

Java

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de 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.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
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.RetentionConfig;
import com.google.protobuf.util.Durations;

public class CreateTopicExample {

  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";
    long projectNumber = Long.parseLong("123456789");
    int partitions = 1;

    createTopicExample(cloudRegion, zoneId, projectNumber, topicId, partitions);
  }

  public static void createTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId, int partitions)
      throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set throughput capacity per partition in MiB/s.
                    .setCapacity(
                        PartitionConfig.Capacity.newBuilder()
                            // Must be 4-16 MiB/s.
                            .setPublishMibPerSec(4)
                            // Must be 4-32 MiB/s.
                            .setSubscribeMibPerSec(8)
                            .build())
                    .setCount(partitions))
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // How long messages are retained.
                    .setPeriod(Durations.fromDays(1))
                    // Set storage per partition to 30 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`.
                    .setPerPartitionBytes(30 * 1024 * 1024 * 1024L))
            .setName(topicPath.toString())
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic response = adminClient.createTopic(topic).get();
      System.out.println(response.getAllFields() + "created successfully.");
    }
  }
}

Python

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.

from google.api_core.exceptions import AlreadyExists
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, TopicPath
from google.protobuf.duration_pb2 import Duration

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"
# num_partitions = 1

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # A topic must have at least one partition.
        count=num_partitions,
        # Set throughput capacity per partition in MiB/s.
        capacity=Topic.PartitionConfig.Capacity(
            # Set publish throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 16.
            publish_mib_per_sec=4,
            # Set subscribe throughput capacity per partition to 4 MiB/s. Must be >= 4 and <= 32.
            subscribe_mib_per_sec=8,
        ),
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 30 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`.
        per_partition_bytes=30 * 1024 * 1024 * 1024,
        # Allow messages to be retained for 7 days.
        period=Duration(seconds=60 * 60 * 24 * 7),
    ),
)

client = AdminClient(cloud_region)
try:
    response = client.create_topic(topic)
    print(f"{response.name} created successfully.")
except AlreadyExists:
    print(f"{topic_path} already exists.")

Pour obtenir la liste des zones disponibles, consultez la section Emplacements Pub/Sub Lite.

Après avoir créé le sujet Lite, vous ne pouvez pas mettre à jour le nombre de partitions, mais vous pouvez ajuster le débit et la capacité de stockage. Pour plus d'informations, consultez la section Scaling de la capacité.

Capacité de provision

Les sujets Lite sont constitués de partitions. Une partition prend en charge la capacité suivante :

  • Débit de publication : débit total maximum auquel vous pouvez publier des messages.
  • Débit d'abonnement : débit total maximal auquel les messages sont transférés vers les abonnements Lite.
  • Stockage : taille totale maximale des messages dans la partition.

Si vous dépassez la capacité de stockage, le service Pub/Sub Lite n'échoue jamais. Au lieu de cela, il supprime le message le plus ancien de la partition, quelle que soit la période de conservation des messages. Le service Pub/Sub Lite supprime les messages de la façon la plus optimale possible.

Mettre à jour des sujets Lite

Vous pouvez mettre à jour la durée de conservation des messages et mettre à l'échelle la capacité d'un sujet Lite. Vous ne pouvez pas mettre à jour le nombre de partitions ou la zone. Pour mettre à l'échelle la capacité d'un sujet Lite, consultez la section Scaling de la capacité.

Vous pouvez mettre à jour un sujet Lite avec Cloud Console, l'outil de ligne de commande gcloud ou l'API Pub/Sub Lite.

Console

  1. Dans Cloud Console, accédez à la page Sujets Lite.

    Accéder à la page Sujets Lite

  2. Cliquez sur l'ID de sujet Lite.

  3. Cliquez sur Modifier.

  4. Saisissez le stockage par partition et la durée de conservation.

  5. Sélectionnez un débit de publication.

  6. Sélectionnez un débit d'abonnement.

  7. Saisissez le stockage par partition.

gcloud

Pour mettre à jour un sujet Lite, utilisez la commande gcloud pubsub lite-topics update :

gcloud pubsub lite-topics update TOPIC_ID \
  --zone=ZONE \
  --per-partition-publish-mib=PUBLISHING_CAPACITY \
  --per-partition-subscribe-mib=SUBSCRIBING_CAPACITY \
  --per-partition-bytes=STORAGE_PER_PARTITION \
  --message-retention-period=MESSAGE_RETENTION_PERIOD

Remplacez l'élément suivant :

  • TOPIC_ID : ID du sujet Lite

  • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

  • PUBLISHING_CAPACITY : entier correspondant à la capacité de débit de publication de chaque partition

  • SUBSCRIBING_CAPACITY : entier correspondant à la capacité de débit d'abonnement de chaque partition

  • STORAGE_PER_PARTITION : quantité de stockage pour chaque partition, par exemple 30GiB

  • MESSAGE_RETENTION_PERIOD : durée pendant laquelle le sujet Lite stocke des messages, tels que 1d ou 2w.

Si la requête aboutit, la ligne de commande affiche le sujet Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocole

Pour mettre à jour un sujet Lite, envoyez une requête PATCH comme suit:

PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID?updateMask=partitionConfig.capacity,retentionConfig.perPartitionBytes,retentionConfig.period
Authorization: Bearer $(gcloud auth print-access-token)

Remplacez l'élément suivant :

  • REGION: région de la zone dans laquelle se trouve le sujet Lite

  • PROJECT_NUMBER: numéro du projet contenant le sujet Lite

  • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

  • TOPIC_ID : ID du sujet Lite

  • PUBLISHING_CAPACITY : entier correspondant à la capacité de débit de publication de chaque partition

  • SUBSCRIBING_CAPACITY : entier correspondant à la capacité de débit d'abonnement de chaque partition

Spécifiez les champs suivants dans le corps de la requête :

{
  "partitionConfig": {
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Remplacez l'élément suivant :

  • PUBLISHING_CAPACITY : entier correspondant à la capacité de débit de publication de chaque partition

  • SUBSCRIBING_CAPACITY : entier correspondant à la capacité de débit d'abonnement de chaque partition

  • STORAGE_PER_PARTITION : quantité de stockage pour chaque partition, par exemple 30GiB

  • MESSAGE_RETENTION_PERIOD : durée pendant laquelle le sujet Lite stocke des messages, tels que 1d ou 2w.

Si la requête aboutit, la réponse est le sujet Lite au format JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Java

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de 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.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
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.RetentionConfig;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.Durations;
import java.util.Arrays;

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";
    long projectNumber = Long.parseLong("123456789");

    updateTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void updateTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

    Iterable<String> iterablePaths =
        Arrays.asList(
            "partition_config.scale",
            "retention_config.per_partition_bytes",
            "retention_config.period");

    FieldMask fieldMask = FieldMask.newBuilder().addAllPaths(iterablePaths).build();

    Topic topic =
        Topic.newBuilder()
            .setPartitionConfig(
                PartitionConfig.newBuilder()
                    // Set publishing throughput to 4 times the standard partition
                    // throughput of 4 MiB per sec. This must be in the range [1,4]. A
                    // topic with `scale` of 2 and count of 10 is charged for 20 partitions.
                    .setScale(4)
                    .build())
            .setRetentionConfig(
                RetentionConfig.newBuilder()
                    // Set storage per partition to 200 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(200 * 1024 * 1024 * 1024L)
                    .setPeriod(Durations.fromDays(7)))
            .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());
    }
  }
}

Python

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.

from google.api_core.exceptions import NotFound
from google.cloud.pubsublite import AdminClient, Topic
from google.cloud.pubsublite.types import CloudRegion, CloudZone, 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"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

# Defines which topic fields to update.
field_mask = FieldMask(
    paths=[
        "partition_config.scale",
        "retention_config.per_partition_bytes",
        "retention_config.period",
    ]
)

# Defines how to update the topic fields.
topic = Topic(
    name=str(topic_path),
    partition_config=Topic.PartitionConfig(
        # Set publishing throughput to 2x standard partition throughput of 4 MiB
        # per second. This must in the range [1,4]. A topic with `scale` of 2 and
        # `count` of 10 is charged for 20 partitions.
        scale=2,
    ),
    retention_config=Topic.RetentionConfig(
        # Set storage per partition to 100 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=100 * 1024 * 1024 * 1024,
        # Allow messages to be stored for 14 days.
        period=Duration(seconds=60 * 60 * 24 * 14),
    ),
)

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.")

Scaling de la capacité

Vous pouvez augmenter la capacité de débit d'un sujet Lite grâce au scaling vertical. Le service Pub/Sub Lite provisionne la même capacité de débit à chaque partition du sujet Lite. Par exemple, si vous augmentez la capacité de débit de publication à 10 Mio par seconde, chacune des partitions obtient 10 Mio par seconde de débit de publication.

Vous pouvez également augmenter ou diminuer l'espace de stockage dans un sujet Lite. Le sujet Lite provisionne la même quantité d'espace de stockage sur chaque partition. Si vous augmentez le stockage à 60 Gio, chacune des partitions dispose de 60 Gio d'espace de stockage.

Si vous réduisez la quantité de stockage dans un sujet Lite, le service Pub/Sub Lite supprime d'abord les messages les plus anciens.

Obtenir des détails sur un sujet Lite

Vous pouvez obtenir des détails sur un sujet Lite à l'aide de Cloud Console, de l'outil de ligne de commande gcloud ou de l'API Pub/Sub Lite.

Console

  1. Dans Cloud Console, accédez à la page Sujets Lite.

    Accéder à la page Sujets Lite

  2. Cliquez sur l'ID de sujet Lite.

gcloud

Pour obtenir des détails sur un sujet Lite, utilisez la commande gcloud pubsub lite-topics describe :

gcloud pubsub lite-topics describe TOPIC_ID \
--zone=ZONE

Remplacez l'élément suivant :

  • TOPIC_ID : ID du sujet Lite

  • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

Si la requête aboutit, la ligne de commande affiche le sujet Lite:

name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOD

Protocole

Pour obtenir des détails sur un sujet Lite, envoyez une requête GET comme suit:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Remplacez l'élément suivant :

  • REGION: région de la zone dans laquelle se trouve le sujet Lite

  • PROJECT_NUMBER: numéro du projet contenant le sujet Lite

  • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

  • TOPIC_ID : ID du sujet Lite

Si la requête aboutit, la réponse est le sujet Lite au format JSON:

{
  "name": projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID,
  "partitionConfig": {
      "count": NUMBER_OF_PARTITIONS,
      "capacity": {
         "publishMibPerSec": PUBLISHING_CAPACITY,
         "subscribeMibPerSec": SUBSCRIBING_CAPACITY,
      }
   },
   "retentionConfig": {
       "perPartitionBytes": STORAGE_PER_PARTITION,
       "period": MESSAGE_RETENTION_PERIOD,
   },
}

Java

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de 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.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.Topic;

public class GetTopicExample {

  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';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    getTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void getTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Topic topic = adminClient.getTopic(topicPath).get();
      long numPartitions = adminClient.getTopicPartitionCount(topicPath).get();
      System.out.println(topic.getAllFields() + "\nhas " + numPartitions + " partition(s).");
    }
  }
}

Python

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.

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

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

client = AdminClient(cloud_region)
try:
    response = client.get_topic(topic_path)
    num_partitions = client.get_topic_partition_count(topic_path)
    print(f"{response.name} has {num_partitions} partition(s).")
except NotFound:
    print(f"{topic_path} not found.")

Répertorier les sujets Lite

Vous pouvez répertorier des sujets Lite dans un projet à l'aide de Cloud Console, de l'outil de ligne de commande gcloud ou de l'API Pub/Sub Lite.

Console

Pour afficher la liste des sujets Lite d'un projet, accédez à la page Sujets Lite.

gcloud

Pour répertorier les sujets Lite d'un projet, utilisez la commande gcloud pubsub lite-topics list :

gcloud pubsub lite-topics list \
  --zone=ZONE

Remplacez ZONE par le nom de la zone dans laquelle se trouve le sujet Lite.

Si la requête aboutit, la ligne de commande affiche les sujets Lite:

---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND
---
name: projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
partitionConfig:
  count: NUMBER_OF_PARTITIONS
  capacity:
    publishMibPerSec: PUBLISHING_CAPACITY
    subscribeMibPerSec: SUBSCRIBING_CAPACITY
retentionConfig:
  perPartitionBytes: STORAGE_PER_PARTITION
  period: MESSAGE_RETENTION_PERIOND

Protocole

Pour répertorier les sujets Lite d'un projet, envoyez une requête GET comme suit:

GET https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/topics
Authorization: Bearer $(gcloud auth print-access-token)

Remplacez l'élément suivant :

  • REGION: région de la zone dans laquelle se trouve le sujet Lite

  • PROJECT_NUMBER: numéro du projet contenant le sujet Lite

Si la requête aboutit, la réponse est une liste de sujets Lite au format JSON :

{
  "topics": [
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID",
      },
      {
          "name": "projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID",
      }
  ]
}

Java

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de 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.CloudZone;
import com.google.cloud.pubsublite.LocationPath;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.proto.Topic;
import java.util.List;

public class ListTopicsExample {

  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';
    long projectNumber = Long.parseLong("123456789");

    listTopicsExample(cloudRegion, zoneId, projectNumber);
  }

  public static void listTopicsExample(String cloudRegion, char zoneId, long projectNumber)
      throws Exception {

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

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      List<Topic> topics = adminClient.listTopics(locationPath).get();
      for (Topic topic : topics) {
        System.out.println(topic.getAllFields());
      }
      System.out.println(topics.size() + " topic(s) listed.");
    }
  }
}

Python

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.

from google.cloud.pubsublite import AdminClient
from google.cloud.pubsublite.types import CloudRegion, CloudZone, LocationPath

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

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
location_path = LocationPath(project_number, location)

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

for topic in response:
    print(topic)

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

Supprimer des sujets Lite

Vous pouvez supprimer des sujets Lite à l'aide de Cloud Console, de l'outil de ligne de commande gcloud ou de l'API Pub/Sub Lite.

Console

  1. Dans Cloud Console, accédez à la page Sujets Lite.

    Accéder à la page Sujets Lite

  2. Cliquez sur l'ID de sujet Lite.

  3. Sur la page Détails du sujet Lite, cliquez sur Supprimer.

  4. Dans le champ qui s'affiche, saisissez delete pour confirmer la suppression du sujet Lite.

  5. Cliquez sur Supprimer.

gcloud

Pour supprimer un sujet Lite, utilisez la commande gcloud pubsub lite-topics delete :

  1. Exécutez la commande delete :

    gcloud pubsub lite-topics delete TOPIC_ID \
     --zone=ZONE
    

    Remplacez l'élément suivant :

    • TOPIC_ID : ID du sujet Lite

    • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

  2. Pour confirmer, saisissez Y.

Si la requête aboutit, la réponse est la suivante :

Deleted topic [TOPIC_ID].

Protocole

Pour supprimer un sujet Lite, envoyez une requête DELETE comme suit:

DELETE https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/ZONE/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth print-access-token)

Remplacez l'élément suivant :

  • REGION: région de la zone dans laquelle se trouve le sujet Lite

  • PROJECT_NUMBER: numéro du projet contenant le sujet Lite

  • ZONE : nom de la zone dans laquelle se trouve le sujet Lite

  • TOPIC_ID : ID du sujet Lite

Si la requête aboutit, la réponse est un objet JSON vide.

Java

Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de 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.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;

public class DeleteTopicExample {

  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';
    // Choose an existing topic.
    String topicId = "your-topic-id";
    long projectNumber = Long.parseLong("123456789");

    deleteTopicExample(cloudRegion, zoneId, projectNumber, topicId);
  }

  public static void deleteTopicExample(
      String cloudRegion, char zoneId, long projectNumber, String topicId) throws Exception {
    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(CloudZone.of(CloudRegion.of(cloudRegion), zoneId))
            .setName(TopicName.of(topicId))
            .build();

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

    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      adminClient.deleteTopic(topicPath).get();
      System.out.println(topicPath.toString() + " deleted successfully.");
    }
  }

Python

Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.

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

# TODO(developer):
# project_number = 1122334455
# cloud_region = "us-central1"
# zone_id = "a"
# topic_id = "your-topic-id"

cloud_region = CloudRegion(cloud_region)
location = CloudZone(cloud_region, zone_id)
topic_path = TopicPath(project_number, location, topic_id)

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

Si vous supprimez un sujet Lite, vous ne pouvez plus publier de messages dessus. Les abonnements au sujet Lite existent toujours, mais vous ne pouvez pas recevoir de messages provenant de ces abonnements Lite.