Creare e utilizzare argomenti

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

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. Dopo aver creato l'argomento, puoi creare un'altra sottoscrizione per l'argomento. L'abbonamento predefinito ha le seguenti proprietà:

    • ID abbonamento -sub
    • Tipo di distribuzione pull
    • Durata di conservazione dei messaggi di 7 giorni
    • Scadenza dopo 31 giorni di inattività
    • Il termine della 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 l'abbonato applicato da Pub/Sub. Gli schemi di argomenti semplificano il consumo di flussi di dati da parte del tuo team nella tua organizzazione creando un'autorità centrale per i tipi di messaggi e le autorizzazioni. Se hai intenzione di creare un argomento con schema, consulta la sezione Creare e gestire schemi.

  • Durata di conservazione dei messaggi. Specifica per quanto tempo l'argomento Pub/Sub conserva i messaggi dopo la pubblicazione. Una volta trascorsa la durata di conservazione, Pub/Sub potrebbe ignorare il messaggio indipendentemente dal suo stato di accettazione. Per l'archiviazione di tutti i messaggi pubblicati nell'argomento vengono addebitati dei costi per l'archiviazione dei messaggi.

    • Valore predefinito = Non abilitato
    • 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 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. Al contrario, Cloud KMS cripta 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 di essere recapitati agli abbonati. Per ulteriori informazioni sulla creazione di una chiave, vedi Configurare la crittografia dei messaggi.

Linee guida per assegnare un nome a un argomento o a una sottoscrizione

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

projects/project-identifier/collection/ID

  • project-identifier. deve essere l'ID progetto, disponibile da Google Cloud Console. Ad esempio, projects/sampleproject/topics/sampletopic.

  • collection. deve essere subscriptions, snapshots o topics.

  • ID. deve essere conforme alle seguenti linee guida:

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

    Puoi utilizzare i caratteri speciali dell'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 nome relativo non valido. Tuttavia, mi-t%C3%B3pico è valido. Questo formato è importante per le chiamate REST.

Crea un argomento

Crea un argomento prima di poterlo pubblicare o iscriverti.

Console

Per creare un argomento, procedi nel seguente modo:

  1. In Cloud Console, vai alla pagina Argomenti di Pub/Sub.

    Vai ad 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

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 credenziali predefinite dell'applicazione attuali: 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 utilizzando le 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) {
      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::runtime_error(topic.status().message());
    
      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 utilizzando le 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 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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.

    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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.

    /**
     * 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub 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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 utilizzando le librerie client. Per scoprire di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.

    # 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

    Quando crei un argomento, potresti visualizzare un errore dovuto a vincoli dei criteri dell'organizzazione. Se i criteri della tua organizzazione non consentono l'archiviazione dei messaggi in qualsiasi area geografica Google Cloud in cui è presente Pub/Sub, devi aggiornare questi criteri prima di creare un argomento.

    Se il progetto dell'argomento è stato creato di recente, potresti dover attendere alcuni minuti per inizializzare il criterio dell'organizzazione prima di poter creare un argomento.

    Vai a Criteri dell'organizzazione

    Creare un argomento con uno schema

    Durante la creazione di un argomento, potresti voler assegnargli 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 ulteriori informazioni sugli schemi, vedi Creare e gestire gli schemi.

    Console

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

    1. In Cloud Console, vai alla pagina Argomenti Pub/Sub.

      Vai ad Argomenti

    2. Fai clic su Crea argomento.

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

    4. Seleziona la casella Use a schema (Utilizza uno schema). Lascia invariate le altre impostazioni predefinite.

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

    6. Nel campo Schema ID (ID schema), inserisci un ID per lo schema.

    7. In Schema type (Tipo di schema), seleziona Avro o Protocol Buffer.

    8. Nel campo Definizione schema, inserisci la definizione Avro di buffer del protocollo per il tuo schema.

    9. Fai clic su Create (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 con lo 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 desiderato per l'argomento che stai creando.
    • ENCODING_TYPE è la codifica dei messaggi convalidati in base allo schema. 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 progetto del progetto Google Cloud per lo schema.
    • TOPIC_PROJECT è l'ID progetto 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 credenziali predefinite dell'applicazione attuali: 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 su cui 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::runtime_error(topic.status().message());
    
      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: 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 di configurazione di Go in Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java 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 Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Python.

    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 Quickstart: Utilizzo di librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 dell'abbonamento è disponibile per gli abbonati. Dopo l'eliminazione di un argomento, le relative sottoscrizioni hanno il nome _deleted-topic_. Se provi a creare un argomento con lo stesso nome di un argomento appena eliminato, attendi un breve periodo di tempo dopo l'eliminazione.

    Di seguito è riportato un esempio che mostra come eliminare un argomento:

    Console

    1. In Cloud Console, vai alla pagina Argomenti di Pub/Sub.

      Vai ad 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

    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 credenziali predefinite dell'applicazione attuali: 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 utilizzando le 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 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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C# .

    
    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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.

    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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.

    /**
     * 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub 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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 utilizzando le librerie client. Per scoprire di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.

    # 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

    Ecco un esempio che mostra come ricevere un elenco di argomenti:

    Console

    • In Cloud Console, vai alla pagina Argomenti di Pub/Sub.

      Vai ad Argomenti

      Nella pagina Argomenti sono elencati tutti gli argomenti disponibili.

    gcloud

    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 credenziali predefinite dell'applicazione attuali: 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 utilizzando le 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 const& project_id) {
      int count = 0;
      for (auto const& topic : client.ListTopics(project_id)) {
        if (!topic) throw std::runtime_error(topic.status().message());
        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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C# .

    
    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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.

    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 utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.

    // 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 che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub 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

    Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nella guida rapida di Pub/Sub utilizzando le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'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 utilizzando le librerie client. Per scoprire di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.

    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 per le dimensioni della pagina.

    Passaggi successivi