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 crearlo. 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. Se vuoi saperne di più su un argomento di importazione e su come crearne uno, consulta Informazioni sugli argomenti di importazione.

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

Prima di iniziare

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per creare un argomento, chiedi all'amministratore di concederti il ruolo IAM Editor Pub/Sub(roles/pubsub.editor) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare un argomento. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare un argomento sono necessarie le seguenti autorizzazioni:

  • Concedi questa autorizzazione per creare un argomento nel progetto: pubsub.topics.create

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

Puoi configurare il controllo dell'accesso a livello di progetto e a livello 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 una sottoscrizione predefinita

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

  • ID sottoscrizione 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

Utilizza uno schema

Uno schema è un formato che il campo dei dati dei messaggi deve seguire. Uno schema è un contratto tra il publisher e il sottoscrittore che Pub/Sub applica. Gli schemi degli argomenti aiutano a 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 uno schema, consulta Panoramica degli schemi.

Abilita importazione

L'abilitazione di questa proprietà consente di importare flussi di dati da origini esterne in un argomento in modo da poter utilizzare le funzionalità di Google Cloud. Per creare un argomento di importazione per l'importazione, consulta:

Attiva la conservazione dei messaggi dell'argomento

Per impostazione predefinita, un argomento Pub/Sub elimina i messaggi non appena vengono confermati da tutte le sottoscrizioni collegate all'argomento. Facoltativamente, puoi configurare un argomento in modo che conservi i messaggi per un periodo massimo di 31 giorni, con un periodo di conservazione minimo di 10 minuti.

La conservazione dei messaggi consente alle sottoscrizioni di riprodurre i messaggi confermati in precedenza o i messaggi pubblicati prima della creazione della sottoscrizione. Per saperne di più, consulta Riprodurre ed eliminare definitivamente i messaggi con la ricerca.

I costi di archiviazione per i messaggi conservati dall'argomento vengono addebitati al progetto dell'argomento. Una volta trascorso il periodo di conservazione dei messaggi, Pub/Sub potrebbe eliminare il messaggio indipendentemente dal suo stato di conferma.

Per visualizzare le metriche relative ai messaggi conservati, utilizza le seguenti metriche di Cloud Monitoring:

Esporta i dati dei messaggi in BigQuery

L'abilitazione di questa proprietà consente di creare una sottoscrizione BigQuery che scrive i messaggi in una tabella BigQuery esistente non appena vengono ricevuti. Non è necessario configurare un client sottoscrittore separato. Per saperne di più sulle sottoscrizioni BigQuery, consulta Sottoscrizioni BigQuery.

Esegui il backup dei dati dei messaggi in Cloud Storage

L'abilitazione di questa proprietà consente di creare una sottoscrizione Cloud Storage che scrive i messaggi in una tabella Cloud Storage esistente non appena vengono ricevuti. Non è necessario configurare un client sottoscrittore separato. Per saperne di più sulle sottoscrizioni Cloud Storage, consulta Sottoscrizioni Cloud Storage.

Trasformazioni

Le trasformazioni SMT degli argomenti consentono di apportare modifiche leggere ai dati e agli attributi dei messaggi direttamente in Pub/Sub. Questa funzionalità consente di pulire, filtrare o convertire il formato dei dati prima che i messaggi vengano pubblicati nell'argomento.

Per saperne di più sulle trasformazioni SMT, consulta la panoramica delle trasformazioni SMT.

Google-owned and Google-managed encryption key

Specifica che l'argomento è criptato utilizzando Google-owned and Google-managed encryption keys. Per impostazione predefinita, Pub/Sub cripta i messaggi con Google-owned and Google-managed encryption keys , quindi la scelta di questa opzione mantiene il comportamento predefinito. Google gestisce e ruota automaticamente le chiavi, assicurandosi che i messaggi siano sempre protetti con la crittografia più efficace disponibile. Questa opzione non richiede ulteriori configurazioni. Per saperne di più su Google-owned and Google-managed encryption keys, consulta Crittografia predefinita con Google-owned and Google-managed encryption keys.

Chiave Cloud KMS

Specifica se l'argomento è criptato con una chiave di crittografia gestita dal cliente (CMEK). Per impostazione predefinita, Pub/Sub cripta i messaggi con Google-owned and Google-managed encryption keys . Se specifichi questa opzione, Pub/Sub utilizza il pattern di crittografia envelope 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 consegnati ai sottoscrittori. Per saperne di più sulla creazione di una chiave, consulta Configurare la crittografia dei messaggi.

Crea un argomento

Crea un argomento prima di poter pubblicare o sottoscrivere.

Console

Per creare un argomento:

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

    Vai a Crea argomento

  2. Nel campo ID argomento, inserisci un ID per l'argomento. Per saperne di più sulla denominazione degli argomenti, consulta le linee guida per la denominazione.

  3. Per creare una sottoscrizione predefinita per l' argomento, seleziona Aggiungi una sottoscrizione predefinita. Questa opzione è abilitata per impostazione predefinita.

  4. (Facoltativo) Per utilizzare uno schema con l'argomento, fai clic su Utilizza uno schema e fornisci lo schema. Per saperne di più, consulta Creare e associare uno schema quando crei un argomento.

  5. Per un argomento standard, lascia deselezionata l'opzione Abilita importazione.

  6. (Facoltativo) Per conservare i messaggi dopo la pubblicazione, seleziona Attiva conservazione messaggi. Seleziona il periodo di conservazione in giorni, ore e minuti. Per saperne di più, consulta Attiva conservazione messaggi.

  7. (Facoltativo) Per esportare i messaggi pubblicati in una tabella BigQuery, seleziona Esporta dati in BigQuery e inserisci i dettagli della tabella. Per saperne di più, consulta Creare sottoscrizioni BigQuery.

  8. (Facoltativo) Per eseguire il backup dei messaggi pubblicati in un bucket Cloud Storage, seleziona Esegui il backup dei dati dei messaggi in Cloud Storage e inserisci i dettagli del bucket Cloud Storage. Per saperne di più, consulta Creare sottoscrizioni Cloud Storage.

  9. (Facoltativo) In Trasformazioni, aggiungi una o più trasformazioni di messaggi singoli (SMT) per manipolare e filtrare i dati dei messaggi. Per saperne di più, consulta Creare un argomento con trasformazioni SMT.

  10. (Facoltativo) Per utilizzare una chiave di crittografia gestita dal cliente (CMEK) per criptare i messaggi, seleziona Chiave Cloud KMS. Per impostazione predefinita, Pub/Sub utilizza la crittografia predefinita di Google, che non richiede una CMEK. Per saperne di più, consulta Configurare la crittografia dei messaggi.

  11. (Facoltativo) Per gestire le chiavi associate all'argomento, fai clic su Gestisci chiavi. Per saperne di più, consulta Introduzione ai tag.

  12. Fai clic su Crea argomento.

gcloud

  1. Nella Google Cloud console, attiva Cloud Shell.

    Attiva Cloud Shell

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

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

    gcloud pubsub topics create TOPIC_ID
    

REST

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

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 corrente: 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 è l'ID argomento.

Risposta:

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

C++

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

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 di configurazione di C# in Guida rapida all'utilizzo delle librerie client. Per saperne di più, 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;
    }
}

Vai

L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.

Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub/v2"
	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
)

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()

	topic := &pubsubpb.Topic{
		Name: fmt.Sprintf("projects/%s/topics/%s", projectID, topicID),
	}
	t, err := client.TopicAdminClient.CreateTopic(ctx, topic)
	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 di configurazione di Java in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Java.


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 di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, 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(topicNameOrId) {
  // Creates a new topic
  await pubSubClient.createTopic(topicNameOrId);
  console.log(`Topic ${topicNameOrId} created.`);
}

Node.ts

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, 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
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 di configurazione di PHP in guida rapida all'utilizzo delle librerie client. Per saperne di più, 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 di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.

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

L'esempio seguente utilizza la libreria client Ruby Pub/Sub v3. Se utilizzi ancora la libreria v2, consulta la guida alla migrazione alla v3. Per visualizzare un elenco di esempi di codice Ruby v2, consulta gli esempi di codice deprecati.

Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Ruby.

# topic_id = "your-topic-id"

pubsub = Google::Cloud::PubSub.new
topic_admin = pubsub.topic_admin

topic = topic_admin.create_topic name: pubsub.topic_path(topic_id)

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

Vincoli delle policy dell'organizzazione

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

Se il progetto è stato creato di recente, attendi qualche minuto che la policy dell'organizzazione venga inizializzata prima di creare un argomento.

Vai a Policy dell'organizzazione

Per saperne di più, consulta Configurare le policy di archiviazione dei messaggi.

Passaggi successivi

Apache Kafka® è un marchio registrato di Apache Software Foundation o delle sue affiliate negli Stati Uniti e/o in altri paesi.