Crea un argomento

In Pub/Sub, un argomento è una risorsa denominata che rappresenta un feed di messaggi. Prima di poter pubblicare o sottoscrivere un argomento, devi creare un argomento. Pub/Sub supporta due tipi di argomenti: un argomento standard e un argomento di importazione.

Questo documento descrive come creare un argomento standard Pub/Sub. Per saperne di più su un argomento di importazione e su come crearne uno, consulta Creare un argomento di importazione.

Per creare un argomento, puoi utilizzare la console Google Cloud, Google Cloud CLI, la libreria client o l'API Pub/Sub.

Prima di iniziare

Ruoli e autorizzazioni richiesti per gestire gli argomenti

Per ottenere le autorizzazioni necessarie per creare e gestire gli argomenti, chiedi all'amministratore di concederti il ruolo IAM Editor Pub/Sub(roles/pubsub.editor) per l'argomento o il progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare e gestire gli argomenti. Per visualizzare esattamente le autorizzazioni necessarie, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare e gestire gli argomenti sono necessarie le seguenti autorizzazioni:

  • Crea un argomento: pubsub.topics.create
  • Elimina un argomento: pubsub.topics.delete
  • Scollega una sottoscrizione da un argomento: pubsub.topics.detachSubscription
  • Visualizza un argomento: pubsub.topics.get
  • Elenca un argomento: pubsub.topics.list
  • Pubblica in un argomento: pubsub.topics.publish
  • Aggiorna un argomento: pubsub.topics.update
  • Ottieni il criterio IAM per un argomento: pubsub.topics.getIamPolicy
  • Configura il criterio IAM per un argomento: pubsub.topics.setIamPolicy

Potresti anche riuscire a ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Puoi configurare il controllo dell'accesso a livello di progetto e di singola risorsa. Puoi creare una sottoscrizione in un progetto e collegarla a un argomento che si trova in un altro progetto. Assicurati di disporre delle autorizzazioni necessarie per ogni progetto.

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 la sua creazione. La sottoscrizione predefinita ha le seguenti proprietà:

    • ID abbonamento di -sub
    • Tipo di distribuzione pull
    • Durata di conservazione dei messaggi di sette 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 il publisher e il sottoscrittore applicato da Pub/Sub. Gli schemi degli 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 i tipi di messaggi e le autorizzazioni. Per creare un argomento con schema, consulta Panoramica degli schemi.
  • Abilita l'importazione. L'abilitazione di questa proprietà consente di importare flussi di dati da origini esterne in un argomento per poter sfruttare le funzionalità di Google Cloud. Per creare un argomento di importazione, consulta la sezione Creare un argomento di importazione.

  • Durata di conservazione dei messaggi. Specifica per quanto tempo l'argomento Pub/Sub conserva i messaggi dopo la pubblicazione. Al termine della durata di conservazione dei messaggi, Pub/Sub potrebbe eliminarlo indipendentemente dal suo stato di conferma. Vengono addebitate le tariffe di archiviazione dei messaggi per l'archiviazione di tutti i messaggi pubblicati nell'argomento.

    • 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 di proprietà di Google e gestite da Google per impostazione predefinita. Se specifichi questa opzione, Pub/Sub utilizza il pattern di crittografia envelope con CMEK. In questo approccio, Cloud KMS non cripta i messaggi. Cloud KMS cripta le chiavi di crittografia dei dati (DEK, Data Encryption Key) create da Pub/Sub per ciascun argomento. Pub/Sub cripta i messaggi utilizzando la DEK più recente generata per l'argomento. Pub/Sub decripta i messaggi poco prima che vengano consegnati ai sottoscrittori. Per ulteriori informazioni sulla creazione di una chiave, consulta Configurare la crittografia dei messaggi.

crea un argomento

Crea un argomento prima di pubblicarlo o abbonarti.

Console

Per creare un argomento:

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

    Vai ad Argomenti

  2. Fai clic su Crea argomento.

  3. Inserisci un ID per l'argomento nel campo ID argomento. Per ulteriori informazioni sull'assegnazione dei nomi agli argomenti, consulta le linee guida per l'assegnazione dei nomi.

  4. Mantieni l'opzione Aggiungi un abbonamento predefinito.

  5. Non selezionare le altre opzioni.

  6. Fai clic su Crea argomento.

gcloud

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. 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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C++ Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::TopicAdminClient client, std::string project_id,
       std::string topic_id) {
      auto topic = client.CreateTopic(
          pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
      // 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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    
    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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    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: %w", err)
    	}
    	defer client.Close()
    
    	t, err := client.CreateTopic(ctx, topicID)
    	if err != nil {
    		return fmt.Errorf("CreateTopic: %w", 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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    
    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

    /**
     * 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(topicNameOrId) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    Node.js

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

    PHP

    Prima di provare questo esempio, segui le istruzioni per la configurazione di PHP nella guida rapida di Pub/Sub sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    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 sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.

    Per eseguire l'autenticazione su Pub/Sub, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

    # topic_id = "your-topic-id"
    
    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 progetto è stato appena creato, attendi alcuni minuti per l'inizializzazione del criterio dell'organizzazione prima di creare un argomento.

    Vai a Criteri dell'organizzazione

    Per ulteriori informazioni, vedi Configurare i criteri di archiviazione dei messaggi.

    Passaggi successivi