Gérer les sujets et les abonnements

Ce document fournit des informations sur la création, la suppression et l'administration de sujets et d'abonnements Cloud Pub/Sub. Pour en savoir plus sur l'accès aux données de message et leur publication, consultez le guide pour les éditeurs et la présentation des abonnements.

Gérer les sujets

Vous pouvez créer, supprimer et afficher des sujets à l'aide de l'API, de la console GCP ou de l'outil de ligne de commande gcloud. Consultez la référence gcloud pubsub pour une liste complète des commandes gcloud de l'API Cloud Pub/Sub.

Pour une introduction à la console GCP, consultez le guide de démarrage rapide de la console GCP.

Créer un sujet

Avant de pouvoir publier un sujet ou de vous y abonner, vous devez d'abord le créer. Voici un exemple de procédure à suivre pour créer un sujet :

Protocole

Requête :

PUT https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic

Réponse :

200 OK
{
 "name": "projects/myproject/topics/mytopic"
}

Ligne de commande

  gcloud pubsub topics create myTopic

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();

            TopicName topicName = new TopicName(projectId, topicId);
            try
            {
                publisher.CreateTopic(topicName);
            }
            catch (RpcException e)
            when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                // Already exists.  That's fine.
            }

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

t, err := client.CreateTopic(ctx, topic)
if err != nil {
	return err
}
fmt.Printf("Topic created: %v\n", t)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  // projectId <=  unique project identifier, eg. "my-project-id"
  // topicId <= "my-topic-id"
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  Topic topic = topicAdminClient.createTopic(topicName);
  return topic;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Creates a new topic
await pubsub.createTopic(topicName);
console.log(`Topic ${topicName} created.`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub topic.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 */
function create_topic($projectId, $topicName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->createTopic($topicName);

    printf('Topic created: %s' . PHP_EOL, $topic->name());
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

topic = publisher.create_topic(topic_path)

print('Topic created: {}'.format(topic))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic  = pubsub.create_topic topic_name

puts "Topic #{topic.name} created."

Supprimer un sujet

Voici un exemple de procédure à suivre pour supprimer un sujet :

Protocole

Requête :

DELETE https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic

Réponse :

200 OK
{
 "name": "projects/myproject/topics/mytopic"
}

COMMANDE GCLOUD

  gcloud pubsub topics delete myTopic

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
TopicName topicName = new TopicName(projectId, topicId);
publisher.DeleteTopic(topicName);
Console.WriteLine("Topic deleted.");

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

t := client.Topic(topic)
if err := t.Delete(ctx); err != nil {
	return err
}
fmt.Printf("Deleted topic: %v\n", t)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  topicAdminClient.deleteTopic(topicName);
  return topicName;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Deletes the topic
await pubsub.topic(topicName).delete();
console.log(`Topic ${topicName} deleted.`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub topic.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 */
function delete_topic($projectId, $topicName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $topic->delete();

    printf('Topic deleted: %s' . PHP_EOL, $topic->name());
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

publisher.delete_topic(topic_path)

print('Topic deleted: {}'.format(topic_path))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic = pubsub.topic topic_name
topic.delete

puts "Topic #{topic_name} deleted."

Lorsque vous supprimez un sujet, ses abonnements ne sont pas supprimés et les messages en attente liés aux abonnements sont disponibles pour les abonnés. Une fois un sujet supprimé, ses abonnements portent le nom de sujet _deleted-topic_. Si vous essayez de créer un sujet portant le même nom qu'un sujet que vous venez de supprimer, une erreur est susceptible de s'afficher pendant une courte période après la suppression.

Obtenir la liste des sujets

Voici un exemple de procédure à suivre pour obtenir la liste des sujets :

Protocole

Requête :

GET https://pubsub.googleapis.com/v1/projects/myproject/topics

Réponse :

200 OK
{
  "topics": [
    {
      "name": "projects/myproject/topics/mytopic1"
    },
    {
      "name": "projects/myproject/topics/mytopic2"
    }
  ]
}

COMMANDE GCLOUD

   gcloud pubsub topics list

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

ProjectName projectName = new ProjectName(projectId);
IEnumerable<Topic> topics = publisher.ListTopics(projectName);
foreach (Topic topic in topics)
{
    Console.WriteLine($"{topic.Name}");
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

var topics []*pubsub.Topic

it := client.Topics(ctx)
for {
	topic, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	topics = append(topics, topic)
}

return topics, nil

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ListTopicsRequest listTopicsRequest =
      ListTopicsRequest.newBuilder().setProject(ProjectName.format(projectId)).build();
  ListTopicsPagedResponse response = topicAdminClient.listTopics(listTopicsRequest);
  Iterable<Topic> topics = response.iterateAll();
  for (Topic topic : topics) {
    // do something with the topic
  }
  return response;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

// Lists all topics in the current project
const [topics] = await pubsub.getTopics();
console.log('Topics:');
topics.forEach(topic => console.log(topic.name));

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Lists all Pub/Sub topics.
 *
 * @param string $projectId  The Google project ID.
 */
function list_topics($projectId)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    foreach ($pubsub->topics() as $topic) {
        printf('Topic: %s' . PHP_EOL, $topic->name());
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"

publisher = pubsub_v1.PublisherClient()
project_path = publisher.project_path(project_id)

for topic in publisher.list_topics(project_path):
    print(topic)

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id = "Your Google Cloud Project ID"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topics = pubsub.topics

puts "Topics in project:"
topics.each do |topic|
  puts topic.name
end
Par défaut, 100 résultats au maximum sont renvoyés par requête. Vous pouvez spécifier une autre valeur allant jusqu'à 1 000 à l'aide du paramètre de taille des pages.

Gérer les abonnements

Dans cette section, nous vous expliquons comment créer et gérer des abonnements push et pull. Pour obtenir une présentation et une comparaison de ces deux types d'abonnements, consultez la page Présentation des abonnements.

Vous devez créer un abonnement associé à un sujet pour que les abonnés puissent recevoir les messages qui y sont publiés.

Consultez également la documentation de référence de gcloud pour découvrir les commandes d'abonné.

Vous pouvez définir plusieurs propriétés pour les abonnements au moment de la création, ou ultérieurement, lors d'une mise à jour. Par exemple :

  • Méthode de distribution : par défaut, les abonnements Cloud Pub/Sub utilisent la méthode pull. Vous pouvez passer à la distribution push en spécifiant une URL de point de terminaison push HTTPS valide et non vide. Il est possible de revenir à la distribution pull en spécifiant une URL vide.

  • Délai d'accusé de réception : si votre code n'accuse pas réception du message avant la fin du délai, le message est à nouveau envoyé. La valeur par défaut est de 10 secondes. Le délai personnalisé maximal que vous pouvez définir est de 600 secondes, soit 10 minutes.

Protocole

Requête :

PUT https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription
{
  "topic": "projects/someproject/topics/sometopic"
  // Only needed if you are using push delivery
  "pushConfig": {
    "pushEndpoint": "https://myproject.appspot.com/myhandler"
  }
}

Réponse :

200 OK
{
  "name": "projects/myproject/subscriptions/mysubscription",
  "topic": "projects/someproject/topics/sometopic",
  "pushConfig": {
    "pushEndpoint": "https://myproject.appspot.com/myhandler"
  },
  "ackDeadlineSeconds": 10
}

COMMANDE GCLOUD

   gcloud pubsub subscriptions create mySubscription --topic myTopic

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
TopicName topicName = new TopicName(projectId, topicId);
SubscriptionName subscriptionName = new SubscriptionName(projectId,
    subscriptionId);
try
{
    Subscription subscription = subscriber.CreateSubscription(
        subscriptionName, topicName, pushConfig: null,
        ackDeadlineSeconds: 60);
}
catch (RpcException e)
when (e.Status.StatusCode == StatusCode.AlreadyExists)
{
    // Already exists.  That's fine.
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

sub, err := client.CreateSubscription(ctx, subName, pubsub.SubscriptionConfig{
	Topic:       topic,
	AckDeadline: 20 * time.Second,
})
if err != nil {
	return err
}
fmt.Printf("Created subscription: %v\n", sub)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  // eg. projectId = "my-test-project", topicId = "my-test-topic"
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  // eg. subscriptionId = "my-test-subscription"
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  // create a pull subscription with default acknowledgement deadline
  Subscription subscription =
      subscriptionAdminClient.createSubscription(
          subscriptionName, topicName, PushConfig.getDefaultInstance(), 0);
  return subscription;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following lines to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

// Creates a new subscription
await pubsub.topic(topicName).createSubscription(subscriptionName);
console.log(`Subscription ${subscriptionName} created.`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function create_subscription($projectId, $topicName, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $subscription->create();

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"

subscriber = pubsub_v1.SubscriberClient()
topic_path = subscriber.topic_path(project_id, topic_name)
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

subscription = subscriber.create_subscription(
    subscription_path, topic_path)

print('Subscription created: {}'.format(subscription))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id        = "Your Google Cloud Project ID"
# topic_name        = "Your Pubsub topic name"
# subscription_name = "Your Pubsub subscription name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic        = pubsub.topic topic_name
subscription = topic.subscribe subscription_name

puts "Pull subscription #{subscription_name} created."

Vous pouvez créer des abonnements push en indiquant une URL de point de terminaison HTTP, comme illustré dans les exemples suivants :

COMMANDE GCLOUD

   gcloud pubsub subscriptions create mySubscription --topic myTopic --push-endpoint="https://myapp.appspot.com/push"

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

// For example, endpoint is "https://my-test-project.appspot.com/push".
sub, err := client.CreateSubscription(ctx, subName, pubsub.SubscriptionConfig{
	Topic:       topic,
	AckDeadline: 10 * time.Second,
	PushConfig:  pubsub.PushConfig{Endpoint: endpoint},
})
if err != nil {
	return err
}
fmt.Printf("Created subscription: %v\n", sub)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);

  // eg. endpoint = "https://my-test-project.appspot.com/push"
  PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(endpoint).build();

  // acknowledgement deadline in seconds for the message received over the push endpoint
  int ackDeadlineInSeconds = 10;

  Subscription subscription =
      subscriptionAdminClient.createSubscription(
          subscriptionName, topicName, pushConfig, ackDeadlineInSeconds);
  return subscription;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following lines to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

const options = {
  pushConfig: {
    // Set to an HTTPS endpoint of your choice. If necessary, register
    // (authorize) the domain on which the server is hosted.
    pushEndpoint: `https://${pubsub.projectId}.appspot.com/push`,
  },
};

await pubsub.topic(topicName).createSubscription(subscriptionName, options);
console.log(`Subscription ${subscriptionName} created.`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub push subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $topicName  The Pub/Sub topic name.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 * @param string $endpoint  The endpoint for the push subscription.
 */
function create_push_subscription($projectId, $topicName, $subscriptionName, $endpoint)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $subscription = $topic->subscription($subscriptionName);
    $subscription->create([
        'endpoint' => $endpoint
    ]);

    printf('Subscription created: %s' . PHP_EOL, $subscription->name());
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"
# TODO endpoint = "https://my-test-project.appspot.com/push"

subscriber = pubsub_v1.SubscriberClient()
topic_path = subscriber.topic_path(project_id, topic_name)
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

push_config = pubsub_v1.types.PushConfig(
    push_endpoint=endpoint)

subscription = subscriber.create_subscription(
    subscription_path, topic_path, push_config)

print('Push subscription created: {}'.format(subscription))
print('Endpoint for subscription is: {}'.format(endpoint))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id        = "Your Google Cloud Project ID"
# topic_name        = "Your Pubsub topic name"
# subscription_name = "Your Pubsub subscription name"
# endpoint          = "Endpoint where your app receives messages"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic        = pubsub.topic topic_name
subscription = topic.subscribe subscription_name,
                               endpoint: endpoint

puts "Push subscription #{subscription_name} created."

Passer d'un abonnement push à un abonnement pull, et vice versa

Pour changer de type d'abonnement, vous pouvez accéder à la page Cloud Pub/Sub de la console GCP. Dans la console, modifiez l'abonnement, puis sélectionnez Pull ou Push pour définir l'option Type de distribution.

Vous pouvez également utiliser l'outil de ligne de commande gcloud. Plus précisément, exécutez la commande modify-push-config pour modifier l'URL de point de terminaison push.

  • Pour passer d'un abonnement push à un abonnement pull, remplacez l'URL par une chaîne vide.
  • Pour passer d'un abonnement pull à un abonnement push, saisissez une URL valide.

Exemples : modifier le point de terminaison ou le mécanisme de distribution d'un abonnement

Une fois qu'un abonnement est créé, vous pouvez mettre à jour son point de terminaison push, ou passer de push à pull et vice versa. Voici des exemples illustrant la procédure à suivre pour mettre à jour un abonnement pull ou push existant, pour lesquels il faut indiquer une URL de point de terminaison push HTTPS valide et non vide :

COMMANDE GCLOUD

   gcloud pubsub subscriptions modify-push-config mySubscription --push-endpoint="https://anotherapp.appspot.com/push"

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

// For example, endpoint is "https://my-test-project.appspot.com/push".
subConfig, err := client.Subscription(subName).Update(ctx, pubsub.SubscriptionConfigToUpdate{
	PushConfig: &pubsub.PushConfig{Endpoint: endpoint},
})
if err != nil {
	return err
}
fmt.Printf("Updated subscription config: %#v", subConfig)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  PushConfig pushConfig = PushConfig.newBuilder().setPushEndpoint(endpoint).build();
  subscriptionAdminClient.modifyPushConfig(subscriptionName, pushConfig);
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';
// const subscriptionName = 'my-sub';

const options = {
  // Set to an HTTPS endpoint of your choice. If necessary, register
  // (authorize) the domain on which the server is hosted.
  pushEndpoint: `https://${pubsub.projectId}.appspot.com/push`,
};

await pubsub
  .topic(topicName)
  .subscription(subscriptionName)
  .modifyPushConfig(options);
console.log(`Modified push config for subscription ${subscriptionName}.`);

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"
# TODO subscription_name = "Your Pub/Sub subscription name"
# TODO endpoint = "https://my-test-project.appspot.com/push"

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

push_config = pubsub_v1.types.PushConfig(
    push_endpoint=endpoint)

subscription = pubsub_v1.types.Subscription(
    name=subscription_path,
    push_config=push_config)

update_mask = {
    'paths': {
        'push_config',
    }
}

subscriber.update_subscription(subscription, update_mask)
result = subscriber.get_subscription(subscription_path)

print('Subscription updated: {}'.format(subscription_path))
print('New endpoint for subscription is: {}'.format(
    result.push_config))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id        = "Your Google Cloud Project ID"
# subscription_name = "Your Pubsub subscription name"
# new_endpoint      = "Endpoint where your app receives messages""
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscription          = pubsub.subscription subscription_name
subscription.endpoint = new_endpoint

puts "Push endpoint updated."

Modifier les règles d'expiration de l'abonnement

Par défaut, les abonnements expirent après 31 jours d'inactivité. Si Cloud Pub/Sub détecte une activité d'abonné (telle que des connexions ouvertes, des actions pull actives ou push réussies), l'horloge de suppression d'abonnement redémarre.

Pour modifier ce comportement, mettez à jour la règle d'expiration de l'abonnement. Vous pouvez définir la durée de la règle lorsque vous créez l'abonnement ou ultérieurement, lorsque vous le modifiez. La valeur minimale autorisée pour cette règle d'expiration est 1 jour. Il n'y a pas de durée maximale. Utilisez l'une des options suivantes pour configurer la règle :

Conserver les messages non confirmés et confirmés

Par défaut, Cloud Pub/Sub s'assure que les abonnements conservent les messages non confirmés pendant sept jours à compter de la publication. Après expiration de la durée spécifiée dans cette propriété, les messages peuvent être perdus qu'ils soient confirmés ou non. Vous pouvez spécifier la durée pendant laquelle un abonnement doit conserver les messages, jusqu'à sept jours au maximum, à l'aide de messageRetentionDuration. Vous avez également la possibilité de configurer l'abonnement pour conserver les messages confirmés pendant cette durée. Consultez la page Rouvrir et supprimer des messages.

Répertorier les abonnements

Vous pouvez obtenir la liste de tous les abonnements d'un projet, ou uniquement celle des abonnements associés à un sujet précis. Pour en savoir plus sur la limitation d'accès, consultez la page Contrôle des accès si nécessaire. Voici des exemples illustrant la procédure à suivre pour obtenir la liste de tous les abonnements d'un projet.

COMMANDE GCLOUD

   gcloud pubsub subscriptions list

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
ProjectName projectName = new ProjectName(projectId);
IEnumerable<Subscription> subscriptions =
    subscriber.ListSubscriptions(projectName);
foreach (Subscription subscription in subscriptions)
{
    Console.WriteLine($"{subscription}");
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

var subs []*pubsub.Subscription
it := client.Subscriptions(ctx)
for {
	s, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	subs = append(subs, s)
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ListSubscriptionsRequest listSubscriptionsRequest =
      ListSubscriptionsRequest.newBuilder()
          .setProject(ProjectName.of(projectId).toString())
          .build();
  ListSubscriptionsPagedResponse response =
      subscriptionAdminClient.listSubscriptions(listSubscriptionsRequest);
  Iterable<Subscription> subscriptions = response.iterateAll();
  for (Subscription subscription : subscriptions) {
    // do something with the subscription
  }
  return response;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

// Lists all subscriptions in the current project
const [subscriptions] = await pubsub.getSubscriptions();
console.log('Subscriptions:');
subscriptions.forEach(subscription => console.log(subscription.name));

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Lists all Pub/Sub subscriptions.
 *
 * @param string $projectId  The Google project ID.
 */
function list_subscriptions($projectId)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    foreach ($pubsub->subscriptions() as $subscription) {
        printf('Subscription: %s' . PHP_EOL, $subscription->name());
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"

subscriber = pubsub_v1.SubscriberClient()
project_path = subscriber.project_path(project_id)

for subscription in subscriber.list_subscriptions(project_path):
    print(subscription.name)

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id = Your Google Cloud Project ID
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscriptions = pubsub.list_subscriptions

puts "Subscriptions:"
subscriptions.each do |subscription|
  puts subscription.name
end

Accéder aux abonnements

Voici des exemples illustrant la procédure à suivre pour accéder aux abonnements associés à un sujet précis.

COMMANDE GCLOUD

   gcloud pubsub topics list-subscriptions myTopic

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

var subs []*pubsub.Subscription

it := client.Topic(topicID).Subscriptions(ctx)
for {
	sub, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return nil, err
	}
	subs = append(subs, sub)
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
  ListTopicSubscriptionsRequest request =
      ListTopicSubscriptionsRequest.newBuilder().setTopic(topicName.toString()).build();
  ListTopicSubscriptionsPagedResponse response =
      topicAdminClient.listTopicSubscriptions(request);
  Iterable<String> subscriptionNames = response.iterateAll();
  for (String subscriptionName : subscriptionNames) {
    // do something with the subscription name
  }
  return response;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const topicName = 'my-topic';

// Lists all subscriptions for the topic
const [subscriptions] = await pubsub.topic(topicName).getSubscriptions();
console.log(`Subscriptions for ${topicName}:`);
subscriptions.forEach(subscription => console.log(subscription.name));

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO topic_name = "Your Pub/Sub topic name"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

for subscription in publisher.list_topic_subscriptions(topic_path):
    print(subscription)

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id = "Your Google Cloud Project ID"
# topic_name = "Your Pubsub topic name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

topic         = pubsub.topic topic_name
subscriptions = topic.subscriptions

puts "Subscriptions in topic #{topic.name}:"
subscriptions.each do |subscription|
  puts subscription.name
end

Supprimer des abonnements

Voici des exemples illustrant la procédure à suivre pour supprimer des abonnements dans un projet lorsqu'ils ne sont plus nécessaires.

COMMANDE GCLOUD

   gcloud pubsub subscriptions delete mySubscription

C#

Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour C#.

SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
SubscriptionName subscriptionName = new SubscriptionName(projectId,
    subscriptionId);
subscriber.DeleteSubscription(subscriptionName);
Console.WriteLine("Subscription deleted.");

Go

Avant d'essayer cet exemple, suivez les instructions de configuration de Go décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Go.

sub := client.Subscription(subName)
if err := sub.Delete(ctx); err != nil {
	return err
}
fmt.Println("Subscription deleted.")

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Java.

try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
  ProjectSubscriptionName subscriptionName =
      ProjectSubscriptionName.of(projectId, subscriptionId);
  subscriptionAdminClient.deleteSubscription(subscriptionName);
  return subscriptionName;
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration de Node.js décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Node.js.

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client
const pubsub = new PubSub();

/**
 * TODO(developer): Uncomment the following line to run the sample.
 */
// const subscriptionName = 'my-sub';

// Deletes the subscription
await pubsub.subscription(subscriptionName).delete();
console.log(`Subscription ${subscriptionName} deleted.`);

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration de PHP décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour PHP.

use Google\Cloud\PubSub\PubSubClient;

/**
 * Creates a Pub/Sub subscription.
 *
 * @param string $projectId  The Google project ID.
 * @param string $subscriptionName  The Pub/Sub subscription name.
 */
function delete_subscription($projectId, $subscriptionName)
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $subscription = $pubsub->subscription($subscriptionName);
    $subscription->delete();

    printf('Subscription deleted: %s' . PHP_EOL, $subscription->name());
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Python.

from google.cloud import pubsub_v1

# TODO project_id = "Your Google Cloud Project ID"
# TODO subscription_name = "Your Pub/Sub subscription name"

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
    project_id, subscription_name)

subscriber.delete_subscription(subscription_path)

print('Subscription deleted: {}'.format(subscription_path))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration de Ruby décrites dans le Guide de démarrage rapide de Cloud Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud Pub/Sub pour Ruby.

# project_id        = "Your Google Cloud Project ID"
# subscription_name = "Your Pubsub subscription name"
require "google/cloud/pubsub"

pubsub = Google::Cloud::Pubsub.new project: project_id

subscription = pubsub.subscription subscription_name
subscription.delete

puts "Subscription #{subscription_name} deleted."

Noms de ressources

Un nom attribué à une ressource Cloud Pub/Sub, comme un abonnement ou un sujet, permet d'identifier cette ressource de manière unique. Le nom doit respecter le format suivant :

projects/project-identifier/collection/relative-name

Vous devez remplacer project-identifier par l'ID du projet, qui est indiqué dans la console Google Cloud Platform. Exemple : projects/myproject/topics/mytopic.

Vous devez remplacer collection soit par subscriptions (abonnements), soit par topics (sujets).

La valeur relative-name correspond au nom relatif de la ressource. Ce nom doit :

  • commencer par une lettre ;
  • contenir entre 3 et 255 caractères ;
  • contenir uniquement les caractères suivants :

    • Lettres : [A-Za-z]
    • Chiffres : [0-9]
    • Tirets : -
    • Traits de soulignement : _
    • Points : .
    • Tildes : ~
    • Signes plus : +
    • Symboles de pourcentage : %

      Même si les caractères spéciaux indiqués ci-dessus peuvent être employés dans les noms de ressources, vous devez vous assurer que ces caractères sont correctement encodés/décodés lorsqu'ils sont utilisés pour des URL. Cette consigne est particulièrement importante lorsqu'il s'agit d'appels REST.

La valeur relative-name ne doit pas commencer par la chaîne goog.

Vous pouvez utiliser des caractères spéciaux dans les noms de ressources, selon les conditions indiquées ci-dessus. Par exemple, mi-tópico n'est pas une valeur valide pour relative-name. En revanche, mi-t%C3%B3pico est accepté.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation sur Cloud Pub/Sub