Creare e utilizzare gli argomenti

Questo documento spiega come creare, aggiornare, visualizzare ed eliminare un argomento Pub/Sub. Questo documento spiega anche come denominare argomenti e iscrizioni.

Replica dei dati in un argomento

Un argomento Pub/Sub utilizza tre zone per archiviare i dati. Il servizio garantisce la replica sincrona in almeno due zone e la replica del miglior tentativo in una terza zona aggiuntiva. La replica Pub/Sub si trova all'interno di una sola regione.

Proprietà di un argomento

Quando crei o aggiorni un argomento, devi specificarne le proprietà.

  • Aggiungi un abbonamento predefinito. Aggiunge una sottoscrizione predefinita all'argomento Pub/Sub. Puoi creare un'altra sottoscrizione per l'argomento dopo averlo creato. L'abbonamento predefinito ha le seguenti proprietà:

    • ID abbonamento di -sub
    • Tipo di distribuzione pull
    • Durata di conservazione dei messaggi di 7 giorni
    • Scadenza dopo 31 giorni di inattività
    • Scadenza conferma di 10 secondi
    • Criterio immediato per nuovi tentativi
  • Schema. Uno schema è un formato che il campo dei dati del messaggio deve seguire. Uno schema è un contratto tra l'editore e il sottoscrittore applicato da Pub/Sub. Gli schemi di argomenti consentono di standardizzare i tipi di messaggi e le autorizzazioni per consentirne l'utilizzo da parte di diversi team dell'organizzazione. Pub/Sub crea un'autorità centrale per tipi di messaggi e autorizzazioni. Per creare un argomento con lo schema, consulta Creare e gestire gli schemi.

  • Durata di conservazione dei messaggi. Specifica per quanto tempo l'argomento Pub/Sub conserva i messaggi dopo la pubblicazione. Una volta terminata la durata della conservazione dei messaggi, Pub/Sub potrebbe ignorarlo indipendentemente dal suo stato di conferma. Per l'archiviazione di tutti i messaggi pubblicati nell'argomento vengono addebitate le tariffe di archiviazione dei messaggi.

    • Predefinito = non attivato
    • Valore minimo = 10 minuti
    • Valore massimo = 31 giorni
  • Utilizza una chiave di crittografia gestita dal cliente (CMEK). Specifica se l'argomento è criptato con una CMEK. Pub/Sub cripta i messaggi con le chiavi gestite da Google per impostazione predefinita. Se specifichi questa opzione, Pub/Sub utilizza il pattern di crittografia della busta con CMEK. Con questo approccio, Cloud KMS non cripta i messaggi. Cloud KMS cripta invece le chiavi di crittografia dei dati (DEK) che Pub/Sub crea per ogni argomento. Pub/Sub cripta i messaggi utilizzando la DEK più recente generata per l'argomento. Pub/Sub decripta i messaggi poco prima che vengano recapitati ai sottoscrittori. Per ulteriori informazioni sulla creazione di una chiave, consulta Configurare la crittografia dei messaggi.

Linee guida per il nome di un argomento, una sottoscrizione o uno snapshot

Il nome di una risorsa Pub/Sub identifica in modo univoco una risorsa Pub/Sub, ad esempio un argomento, una sottoscrizione o uno snapshot. Il nome della risorsa deve rispettare il seguente formato:

projects/project-identifier/collection/ID

  • project-identifier: deve essere l'ID progetto, disponibile nella console Google Cloud. Ad esempio, my-cool-project.

  • collection: deve essere topics, subscriptions o snapshots.

  • ID: deve essere conforme alle seguenti linee guida:

    • Non inizia con la stringa goog
    • Inizia con una lettera
    • Contengono da 3 a 255 caratteri
    • Contengono solo i seguenti caratteri: lettere [A-Za-z], numeri [0-9], trattini -, trattini bassi _, punti ., tilde ~, segni più + e segni percentuali %.

    Puoi utilizzare i caratteri speciali nell'elenco precedente nei nomi delle risorse senza codifica degli URL. Tuttavia, devi assicurarti che tutti gli altri caratteri speciali siano codificati o decodificati correttamente quando li utilizzi negli URL. Ad esempio, mi-tópico è un ID non valido. Tuttavia, il valore mi-t%C3%B3pico è valido. Questo formato è importante quando si effettuano chiamate REST.

Crea un argomento

Crea un argomento prima di poterlo pubblicare o iscriverti.

Console

Per creare un argomento:

  1. Nella console Google Cloud, vai alla pagina Argomenti di Pub/Sub.

    Vai agli argomenti

  2. Fai clic su Crea argomento.

  3. Nel campo ID argomento, inserisci un ID per l'argomento.

  4. Mantieni l'opzione Aggiungi un abbonamento predefinito.

  5. Non selezionare le altre opzioni.

  6. Fai clic su Crea argomento.

gcloud CLI

Per creare un argomento, esegui il comando gcloud pubsub topics create:

gcloud pubsub topics create TOPIC_ID

REST

Per creare un argomento, utilizza il metodo projects.topics.create:

La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.

PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer ACCESS_TOKEN
    

Dove:

  • PROJECT_ID è l'ID progetto.
  • TOPIC_ID è il tuo ID argomento.
  • Risposta:

    {
     "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }

    C++

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C++ Pub/Sub.

    namespace pubsub = ::google::cloud::pubsub;
    [](pubsub::TopicAdminClient client, std::string project_id,
       std::string topic_id) {
      auto topic = client.CreateTopic(pubsub::TopicBuilder(
          pubsub::Topic(std::move(project_id), std::move(topic_id))));
      // Note that kAlreadyExists is a possible error when the library retries.
      if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
        std::cout << "The topic already exists\n";
        return;
      }
      if (!topic) throw std::move(topic).status();
    
      std::cout << "The topic was successfully created: " << topic->DebugString()
                << "\n";
    }

    C#

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C# Pub/Sub.

    
    using Google.Cloud.PubSub.V1;
    using Grpc.Core;
    using System;
    
    public class CreateTopicSample
    {
        public Topic CreateTopic(string projectId, string topicId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            var topicName = TopicName.FromProjectTopic(projectId, topicId);
            Topic topic = null;
    
            try
            {
                topic = publisher.CreateTopic(topicName);
                Console.WriteLine($"Topic {topic.Name} created.");
            }
            catch (RpcException e) when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                Console.WriteLine($"Topic {topicName} already exists.");
            }
            return topic;
        }
    }

    Go

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Go Pub/Sub.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub"
    )
    
    func create(w io.Writer, projectID, topicID string) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	t, err := client.CreateTopic(ctx, topicID)
    	if err != nil {
    		return fmt.Errorf("CreateTopic: %v", err)
    	}
    	fmt.Fprintf(w, "Topic created: %v\n", t)
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java Pub/Sub.

    
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.Topic;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class CreateTopicExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
    
        createTopicExample(projectId, topicId);
      }
    
      public static void createTopicExample(String projectId, String topicId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          TopicName topicName = TopicName.of(projectId, topicId);
          Topic topic = topicAdminClient.createTopic(topicName);
          System.out.println("Created topic: " + topic.getName());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Node.js Pub/Sub.

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic() {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }
    
    createTopic();

    PHP

    Prima di provare questo esempio, segui le istruzioni per la configurazione di PHP nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.

    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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    
    topic = publisher.create_topic(request={"name": topic_path})
    
    print(f"Created topic: {topic.name}")

    Ruby

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Ruby nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Ruby Pub/Sub.

    # topic_id = "your-topic-id"
    require "google/cloud/pubsub"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topic = pubsub.create_topic topic_id
    
    puts "Topic #{topic.name} created."

    Vincoli dei criteri dell'organizzazione

    I criteri dell'organizzazione possono limitare la creazione di argomenti. Ad esempio, un criterio può limitare l'archiviazione dei messaggi in una regione di Compute Engine. Per evitare errori di creazione degli argomenti, esamina e aggiorna i criteri dell'organizzazione, se necessario, prima di creare un argomento.

    Se il tuo progetto è stato appena creato, attendi alcuni minuti che il criterio dell'organizzazione venga inizializzato prima di creare un argomento.

    Vai a Criteri dell'organizzazione

    Creare un argomento con uno schema

    Durante la creazione di un argomento, può essere utile assegnarlo uno schema.

    Di seguito sono riportate alcune linee guida sull'utilizzo degli schemi:

    • Non puoi aggiungere schemi ad argomenti esistenti.
    • Puoi specificare uno schema solo quando crei un argomento.
    • Dopo aver associato uno schema a un argomento, non puoi aggiornarlo o rimuovere la relativa associazione.
    • Puoi applicare lo stesso schema ad altri nuovi argomenti.
    • Se elimini uno schema, la pubblicazione in tutti gli argomenti associati non riesce.

    Per saperne di più sugli schemi, consulta Creare e gestire gli schemi.

    Console

    Per creare un argomento e assegnargli uno schema, procedi nel seguente modo:

    1. Nella console Google Cloud, vai alla pagina Argomenti Pub/Sub.

      Vai agli argomenti

    2. Fai clic su Crea argomento.

    3. Nel campo ID argomento, inserisci un ID per l'argomento.

    4. Seleziona la casella Utilizza uno schema. Lascia le altre opzioni nelle impostazioni predefinite.

    5. Fai clic su Seleziona uno schema Pub/Sub e scegli Crea un nuovo schema. Se vuoi utilizzare uno schema esistente, vai al passaggio 7.

    6. Nel campo ID schema, inserisci un ID per lo schema.

    7. Per Tipo di schema, seleziona Avro o Buffer di protocollo.

    8. Nel campo Definizione schema, inserisci la definizione Avro di buffer di protocollo per lo schema.

    9. Fai clic su Crea per salvare lo schema.

    10. Nella finestra di dialogo Crea un argomento, cerca lo schema nel campo Seleziona uno schema Pub/Sub.

    11. Fai clic su Crea per salvare l'argomento e assegnarlo allo schema selezionato.

    gcloud

    Per creare un argomento assegnato con uno schema creato in precedenza, esegui il comando gcloud pubsub topics create:

    gcloud pubsub topics create TOPIC_ID \
            --message-encoding=ENCODING_TYPE \
            --schema=SCHEMA_ID

    Dove:

    • TOPIC_ID è l'ID dell'argomento che stai creando.
    • ENCODING_TYPE è la codifica dei messaggi convalidati in base allo schema. Questo valore deve essere impostato su JSON o BINARY.
    • SCHEMA_ID è l'ID di uno schema esistente.

    Puoi anche assegnare uno schema da un altro progetto Google Cloud:

    gcloud pubsub topics create TOPIC_ID \
            --message-encoding=ENCODING_TYPE \
            --schema=SCHEMA_ID \
            --schema-project=SCHEMA_PROJECT \
            --project=TOPIC_PROJECT

    Dove:

    • SCHEMA_PROJECT è l'ID del progetto Google Cloud per lo schema.
    • TOPIC_PROJECT è l'ID del progetto Google Cloud per l'argomento.

    REST

    Per creare un argomento, utilizza il metodo projects.topics.create:

    Richiesta:

    La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.

    PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
    Authorization: Bearer ACCESS_TOKEN
    

    Corpo della richiesta:

    {
      "schemaSettings": {
        "schema": "SCHEMA_NAME",
        "encoding": "ENCODING_TYPE"
      }
    }

    Dove:

    • PROJECT_ID è l'ID progetto.
    • TOPIC_ID è il tuo ID argomento.
    • SCHEMA_NAME è il nome dello schema per il quale devono essere convalidati i messaggi pubblicati. Il formato è: projects/PROJECT_ID/schemas/SCHEMA_ID.
    • ENCODING_TYPE è la codifica dei messaggi convalidati in base allo schema. Deve essere impostato su JSON o BINARY.

    Risposta:

    {
      "name": "projects/PROJECT_ID/topics/TOPIC_ID",
      "schemaSettings": {
        "schema": "SCHEMA_NAME",
        "encoding": "ENCODING_TYPE"
      }
    }

    C++

    Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C++.

    namespace pubsub = ::google::cloud::pubsub;
    [](pubsub::TopicAdminClient client, std::string project_id,
       std::string topic_id, std::string schema_id, std::string const& encoding) {
      auto const& schema = pubsub::Schema(project_id, std::move(schema_id));
      auto topic = client.CreateTopic(
          pubsub::TopicBuilder(
              pubsub::Topic(std::move(project_id), std::move(topic_id)))
              .set_schema(schema)
              .set_encoding(encoding == "JSON" ? google::pubsub::v1::JSON
                                               : google::pubsub::v1::BINARY));
      // Note that kAlreadyExists is a possible error when the library retries.
      if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
        std::cout << "The topic already exists\n";
        return;
      }
      if (!topic) throw std::move(topic).status();
    
      std::cout << "The topic was successfully created: " << topic->DebugString()
                << "\n";
    }

    C#

    Prima di provare questo esempio, segui le istruzioni di configurazione di C# in Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.

    
    using Google.Cloud.PubSub.V1;
    using Grpc.Core;
    using System;
    
    public class CreateTopicWithSchemaSample
    {
        public Topic CreateTopicWithSchema(string projectId, string topicId, string schemaName, Encoding encoding)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            var topicName = TopicName.FromProjectTopic(projectId, topicId);
            Topic topic = new Topic
            {
                Name = topicName.ToString(),
                SchemaSettings = new SchemaSettings
                {
                    Schema = schemaName,
                    Encoding = encoding
                }
            };
    
            Topic receivedTopic = null;
            try
            {
                receivedTopic = publisher.CreateTopic(topic);
                Console.WriteLine($"Topic {topic.Name} created.");
            }
            catch (RpcException e) when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                Console.WriteLine($"Topic {topicName} already exists.");
            }
            return receivedTopic;
        }
    }

    Go

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Go in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Go.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub"
    )
    
    func createTopicWithSchema(w io.Writer, projectID, topicID, schemaID string, encoding pubsub.SchemaEncoding) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	// schemaID := "my-schema-id"
    	// encoding := pubsub.EncodingJSON
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %v", err)
    	}
    
    	tc := &pubsub.TopicConfig{
    		SchemaSettings: &pubsub.SchemaSettings{
    			Schema:   fmt.Sprintf("projects/%s/schemas/%s", projectID, schemaID),
    			Encoding: encoding,
    		},
    	}
    	t, err := client.CreateTopicWithConfig(ctx, topicID, tc)
    	if err != nil {
    		return fmt.Errorf("CreateTopicWithConfig: %v", err)
    	}
    	fmt.Fprintf(w, "Topic with schema created: %#v\n", t)
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java di Pub/Sub.

    
    import com.google.api.gax.rpc.AlreadyExistsException;
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.Encoding;
    import com.google.pubsub.v1.SchemaName;
    import com.google.pubsub.v1.SchemaSettings;
    import com.google.pubsub.v1.Topic;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class CreateTopicWithSchemaExample {
    
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        // Use an existing schema.
        String schemaId = "your-schema-id";
        // Choose either BINARY or JSON message serialization in this topic.
        Encoding encoding = Encoding.BINARY;
    
        createTopicWithSchemaExample(projectId, topicId, schemaId, encoding);
      }
    
      public static void createTopicWithSchemaExample(
          String projectId, String topicId, String schemaId, Encoding encoding) throws IOException {
        TopicName topicName = TopicName.of(projectId, topicId);
        SchemaName schemaName = SchemaName.of(projectId, schemaId);
    
        SchemaSettings schemaSettings =
            SchemaSettings.newBuilder().setSchema(schemaName.toString()).setEncoding(encoding).build();
    
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
    
          Topic topic =
              topicAdminClient.createTopic(
                  Topic.newBuilder()
                      .setName(topicName.toString())
                      .setSchemaSettings(schemaSettings)
                      .build());
    
          System.out.println("Created topic with schema: " + topic.getName());
        } catch (AlreadyExistsException e) {
          System.out.println(schemaName + "already exists.");
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Node.js.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const schemaName = 'YOUR_SCHEMA_NAME_OR_ID';
    // const encodingType = 'BINARY';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopicWithSchema(
      topicNameOrId,
      schemaNameOrId,
      encodingType
    ) {
      // Get the fully qualified schema name.
      const schema = pubSubClient.schema(schemaNameOrId);
      const fullName = await schema.getName();
    
      // Creates a new topic with a schema. Note that you might also
      // pass Encodings.Json or Encodings.Binary here.
      await pubSubClient.createTopic({
        name: topicNameOrId,
        schemaSettings: {
          schema: fullName,
          encoding: encodingType,
        },
      });
      console.log(`Topic ${topicNameOrId} created with schema ${fullName}.`);
    }

    PHP

    Prima di provare questo esempio, segui le istruzioni di configurazione di PHP in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.

    use Google\Cloud\PubSub\PubSubClient;
    use Google\Cloud\PubSub\Schema;
    
    /**
     * Create a topic with a schema.
     *
     * @param string $projectId
     * @param string $topicId
     * @param string $schemaId
     * @param string $encoding
     */
    function create_topic_with_schema($projectId, $topicId, $schemaId, $encoding)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
    
        $schema = $pubsub->schema($schemaId);
    
        $topic = $pubsub->createTopic($topicId, [
            'schemaSettings' => [
                // The schema may be provided as an instance of the schema type,
                // or by using the schema ID directly.
                'schema' => $schema,
                // Encoding may be either `BINARY` or `JSON`.
                // Provide a string or a constant from Google\Cloud\PubSub\V1\Encoding.
                'encoding' => $encoding,
            ]
        ]);
    
        printf('Topic %s created', $topic->name());
    }

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.

    from google.api_core.exceptions import AlreadyExists, InvalidArgument
    from google.cloud.pubsub import PublisherClient, SchemaServiceClient
    from google.pubsub_v1.types import Encoding
    
    # TODO(developer): Replace these variables before running the sample.
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # schema_id = "your-schema-id"
    # Choose either BINARY or JSON as valid message encoding in this topic.
    # message_encoding = "BINARY"
    
    publisher_client = PublisherClient()
    topic_path = publisher_client.topic_path(project_id, topic_id)
    
    schema_client = SchemaServiceClient()
    schema_path = schema_client.schema_path(project_id, schema_id)
    
    if message_encoding == "BINARY":
        encoding = Encoding.BINARY
    elif message_encoding == "JSON":
        encoding = Encoding.JSON
    else:
        encoding = Encoding.ENCODING_UNSPECIFIED
    
    try:
        response = publisher_client.create_topic(
            request={
                "name": topic_path,
                "schema_settings": {"schema": schema_path, "encoding": encoding},
            }
        )
        print(f"Created a topic:\n{response}")
    
    except AlreadyExists:
        print(f"{topic_id} already exists.")
    except InvalidArgument:
        print("Please choose either BINARY or JSON as a valid message encoding type.")

    Ruby

    Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida: utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Pub/Sub Ruby.

    # topic_id = "your-topic-id"
    # schema_id = "your-schema-id"
    # Choose either BINARY or JSON as valid message encoding in this topic.
    # message_encoding = :binary
    require "google/cloud/pubsub"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topic = pubsub.create_topic topic_id, schema_name: schema_id, message_encoding: message_encoding
    
    puts "Topic #{topic.name} created."

    Eliminare un argomento

    Quando elimini un argomento, le relative iscrizioni non vengono eliminate. Il backlog dei messaggi della sottoscrizione è disponibile per i sottoscrittori. Una volta eliminato un argomento, il nome dell'argomento delle relative sottoscrizioni è _deleted-topic_. Se provi a creare un argomento con lo stesso nome di un argomento che hai appena eliminato, aspettati un errore per un breve periodo di tempo.

    Console

    1. Nella console Google Cloud, vai alla pagina Argomenti di Pub/Sub.

      Vai agli argomenti

    2. Seleziona un argomento e fai clic su Altre azioni.

    3. Fai clic su Elimina.

      Viene visualizzata la finestra Elimina argomento.

    4. Inserisci delete e fai clic su Elimina.

    gcloud CLI

    Per eliminare un argomento, utilizza il comando gcloud pubsub topics delete:

    gcloud pubsub topics delete TOPIC_ID

    REST

    Per eliminare un argomento, utilizza il metodo projects.topics.delete:

    Richiesta:

    La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.

    DELETE https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
    Authorization: Bearer ACCESS_TOKEN
        

    Dove:

  • PROJECT_ID è l'ID progetto.
  • TOPIC_ID è il tuo ID argomento.
  • Risposta:

    Se la richiesta ha esito positivo, la risposta è un oggetto JSON vuoto.

    C++

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C++ Pub/Sub.

    namespace pubsub = ::google::cloud::pubsub;
    [](pubsub::TopicAdminClient client, std::string const& project_id,
       std::string const& topic_id) {
      auto status = client.DeleteTopic(
          pubsub::Topic(std::move(project_id), std::move(topic_id)));
      // Note that kNotFound is a possible result when the library retries.
      if (status.code() == google::cloud::StatusCode::kNotFound) {
        std::cout << "The topic was not found\n";
        return;
      }
      if (!status.ok()) throw std::runtime_error(status.message());
    
      std::cout << "The topic was successfully deleted\n";
    }

    C#

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C# Pub/Sub.

    
    using Google.Cloud.PubSub.V1;
    
    public class DeleteTopicSample
    {
        public void DeleteTopic(string projectId, string topicId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            publisher.DeleteTopic(topicName);
        }
    }

    Go

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Go Pub/Sub.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub"
    )
    
    func delete(w io.Writer, projectID, topicID string) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	t := client.Topic(topicID)
    	if err := t.Delete(ctx); err != nil {
    		return fmt.Errorf("Delete: %v", err)
    	}
    	fmt.Fprintf(w, "Deleted topic: %v\n", t)
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java Pub/Sub.

    
    import com.google.api.gax.rpc.NotFoundException;
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class DeleteTopicExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
    
        deleteTopicExample(projectId, topicId);
      }
    
      public static void deleteTopicExample(String projectId, String topicId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          TopicName topicName = TopicName.of(projectId, topicId);
          try {
            topicAdminClient.deleteTopic(topicName);
            System.out.println("Deleted topic.");
          } catch (NotFoundException e) {
            System.out.println(e.getMessage());
          }
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Node.js Pub/Sub.

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function deleteTopic() {
      /**
       * TODO(developer): Uncomment the following line to run the sample.
       */
      // const topicName = 'my-topic';
    
      // Deletes the topic
      await pubSubClient.topic(topicNameOrId).delete();
      console.log(`Topic ${topicNameOrId} deleted.`);
    }
    
    deleteTopic().catch(console.error);

    PHP

    Prima di provare questo esempio, segui le istruzioni per la configurazione di PHP nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.

    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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    
    publisher.delete_topic(request={"topic": topic_path})
    
    print(f"Topic deleted: {topic_path}")

    Ruby

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Ruby nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Ruby Pub/Sub.

    # topic_id = "your-topic-id"
    require "google/cloud/pubsub"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topic = pubsub.topic topic_id
    topic.delete
    
    puts "Topic #{topic_id} deleted."

    Elencare un argomento

    Console

    • Nella console Google Cloud, vai alla pagina Argomenti di Pub/Sub.

      Vai agli argomenti

      Nella pagina Argomenti sono elencati tutti gli argomenti disponibili.

    gcloud CLI

    Per elencare gli argomenti, utilizza il comando gcloud pubsub topics list:

    gcloud pubsub topics list

    REST

    Per elencare gli argomenti, utilizza il metodo projects.topics.list:

    Richiesta:

    La richiesta deve essere autenticata con un token di accesso nell'intestazione Authorization. Per ottenere un token di accesso per le attuali Credenziali predefinite dell'applicazione: gcloud auth application-default print-access-token.

    GET https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics
    Authorization: Bearer ACCESS_TOKEN
        

    Dove:

  • PROJECT_ID è l'ID progetto.
  • Risposta:

    {
      "topics": [
        {
          "name": "projects/PROJECT_ID/topics/mytopic1",
          ...
        },
        {
          "name": "projects/PROJECT_ID/topics/mytopic2",
          ...
        }
      ]
    }

    C++

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C++ nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C++ Pub/Sub.

    namespace pubsub = ::google::cloud::pubsub;
    [](pubsub::TopicAdminClient client, std::string const& project_id) {
      int count = 0;
      for (auto& topic : client.ListTopics(project_id)) {
        if (!topic) throw std::move(topic).status();
        std::cout << "Topic Name: " << topic->name() << "\n";
        ++count;
      }
      if (count == 0) {
        std::cout << "No topics found in project " << project_id << "\n";
      }
    }

    C#

    Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API C# Pub/Sub.

    
    using Google.Api.Gax.ResourceNames;
    using Google.Cloud.PubSub.V1;
    using System.Collections.Generic;
    
    public class ListProjectTopicsSample
    {
        public IEnumerable<Topic> ListProjectTopics(string projectId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            ProjectName projectName = ProjectName.FromProject(projectId);
            IEnumerable<Topic> topics = publisher.ListTopics(projectName);
            return topics;
        }
    }

    Go

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Go Pub/Sub.

    import (
    	"context"
    	"fmt"
    
    	"cloud.google.com/go/pubsub"
    	"google.golang.org/api/iterator"
    )
    
    func list(projectID string) ([]*pubsub.Topic, error) {
    	// projectID := "my-project-id"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return nil, fmt.Errorf("pubsub.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	var topics []*pubsub.Topic
    
    	it := client.Topics(ctx)
    	for {
    		topic, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return nil, fmt.Errorf("Next: %v", err)
    		}
    		topics = append(topics, topic)
    	}
    
    	return topics, nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Java Pub/Sub.

    
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.ProjectName;
    import com.google.pubsub.v1.Topic;
    import java.io.IOException;
    
    public class ListTopicsExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
    
        listTopicsExample(projectId);
      }
    
      public static void listTopicsExample(String projectId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          ProjectName projectName = ProjectName.of(projectId);
          for (Topic topic : topicAdminClient.listTopics(projectName).iterateAll()) {
            System.out.println(topic.getName());
          }
          System.out.println("Listed all topics.");
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Node.js Pub/Sub.

    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function listAllTopics() {
      // Lists all topics in the current project
      const [topics] = await pubSubClient.getTopics();
      console.log('Topics:');
      topics.forEach(topic => console.log(topic.name));
    }
    
    listAllTopics().catch(console.error);

    PHP

    Prima di provare questo esempio, segui le istruzioni per la configurazione di PHP nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API PHP Pub/Sub.

    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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Python Pub/Sub.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    
    publisher = pubsub_v1.PublisherClient()
    project_path = f"projects/{project_id}"
    
    for topic in publisher.list_topics(request={"project": project_path}):
        print(topic)

    Ruby

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Ruby nella guida rapida di Pub/Sub mediante librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento per l'API Ruby Pub/Sub.

    require "google/cloud/pubsub"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topics = pubsub.topics
    
    puts "Topics in project:"
    topics.each do |topic|
      puts topic.name
    end

    Per impostazione predefinita, vengono restituiti massimo 100 risultati per query. Puoi specificare un valore alternativo fino a 1000 utilizzando il parametro delle dimensioni della pagina.

    Monitora gli argomenti

    Puoi monitorare gli argomenti da Pub/Sub.

    Passaggi successivi