Thema erstellen

In Pub/Sub ist ein Thema eine benannte Ressource, die für einen Nachrichtenfeed steht. Sie müssen ein Thema erstellen, bevor Sie es veröffentlichen oder abonnieren können.

In diesem Dokument wird beschrieben, wie Sie ein Pub/Sub-Thema erstellen. Zum Erstellen eines Themas können Sie die Google Cloud Console, die Google Cloud CLI, die Clientbibliothek oder die Pub/Sub API verwenden.

Hinweise

Erforderliche Rollen und Berechtigungen zum Verwalten von Themen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „Pub/Sub Editor“ (roles/pubsub.editor) für Ihr Thema oder Projekt zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen und Verwalten von Themen benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen und Verwalten von Themen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Zum Erstellen und Verwalten von Themen sind die folgenden Berechtigungen erforderlich:

  • Thema erstellen: pubsub.topics.create
  • Thema löschen: pubsub.topics.delete
  • Abo von einem Thema trennen: pubsub.topics.detachSubscription
  • Thema abrufen: pubsub.topics.get
  • Thema auflisten: pubsub.topics.list
  • In einem Thema veröffentlichen: pubsub.topics.publish
  • Thema aktualisieren: pubsub.topics.update
  • IAM-Richtlinie für ein Thema abrufen: pubsub.topics.getIamPolicy
  • Konfigurieren Sie die IAM-Richtlinie für ein Thema: pubsub.topics.setIamPolicy

Möglicherweise können Sie diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Sie können die Zugriffssteuerung auf Projektebene und auf der Ebene einzelner Ressourcen konfigurieren. Sie können ein Abo in einem Projekt erstellen und an ein Thema in einem anderen Projekt anhängen. Prüfen Sie, ob Sie die erforderlichen Berechtigungen für jedes Projekt haben.

Eigenschaften eines Themas

Wenn Sie ein Thema erstellen oder aktualisieren, müssen Sie dessen Attribute angeben.

  • Fügen Sie ein Standardabo hinzu. Fügt dem Pub/Sub-Thema ein Standardabo hinzu. Sie können ein weiteres Abo für das Thema erstellen, nachdem es erstellt wurde. Das Standardabo hat die folgenden Attribute:

    • Abo-ID von -sub
    • Pull-Zustellungstyp
    • Aufbewahrungsdauer für Nachrichten von sieben Tagen
    • Ablauf nach 31 Tagen Inaktivität
    • Bestätigungsfrist von 10 Sekunden
    • Richtlinie für sofortige Wiederholung
  • Schema: Ein Schema ist ein Format, dem das Nachrichtendatenfeld entsprechen muss. Ein Schema ist ein Vertrag zwischen dem Publisher und Abonnenten, den Pub/Sub erzwingt. Mithilfe von Themenschemas lassen sich Nachrichtentypen und -berechtigungen standardisieren, damit sie von verschiedenen Teams in Ihrer Organisation genutzt werden können. Pub/Sub erstellt eine zentrale Zertifizierungsstelle für Nachrichtentypen und Berechtigungen. Informationen zum Erstellen eines Themas mit Schema finden Sie unter Schemaübersicht.
  • Dauer der Nachrichtenaufbewahrungsdauer. Gibt an, wie lange Nachrichten nach der Veröffentlichung im Pub/Sub-Thema aufbewahrt werden. Nach Ablauf der Aufbewahrungsdauer für Nachrichten verwirft Pub/Sub die Nachricht möglicherweise unabhängig von ihrem Bestätigungsstatus. Für das Speichern aller im Thema veröffentlichten Nachrichten werden Gebühren für das Speichern von Nachrichten berechnet.

    • Standard = Nicht aktiviert
    • Mindestwert = 10 Minuten
    • Maximalwert = 31 Tage
  • Einen vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verwenden. Gibt an, ob das Thema mit einem CMEK verschlüsselt ist. Pub/Sub verschlüsselt Nachrichten standardmäßig mit von Google verwalteten Schlüsseln. Wenn Sie diese Option angeben, verwendet Pub/Sub das Muster für die Umschlagverschlüsselung mit CMEK. Bei diesem Ansatz verschlüsselt Cloud KMS die Nachrichten nicht. Stattdessen verschlüsselt Cloud KMS die Datenverschlüsselungsschlüssel (Data Encryption Keys, DEKs), die Pub/Sub für jedes Thema erstellt. Pub/Sub verschlüsselt die Nachrichten mit dem neuesten DEK, der für das Thema generiert wurde. Pub/Sub entschlüsselt die Nachrichten, kurz bevor sie an Abonnenten zugestellt werden. Weitere Informationen zum Erstellen eines Schlüssels finden Sie unter Nachrichtenverschlüsselung konfigurieren.

Thema erstellen

Erstellen Sie ein Thema, bevor Sie es veröffentlichen oder abonnieren können.

Console

So erstellen Sie ein Thema:

  1. Öffnen Sie in der Google Cloud Console die Pub/Sub-Seite Themen.

    Themen aufrufen

  2. Klicken Sie auf Thema erstellen.

  3. Geben Sie im Feld Themen-ID eine ID für das Thema ein. Weitere Informationen zur Benennung von Themen finden Sie in den Benennungsrichtlinien.

  4. Behalten Sie die Option Standardabo hinzufügen bei.

  5. Wählen Sie nicht die anderen Optionen aus.

  6. Klicken Sie auf Thema erstellen.

gcloud

Führen Sie den Befehl gcloud pubsub topics create aus, um ein Thema zu erstellen:

gcloud pubsub topics create TOPIC_ID

REST

Verwenden Sie zum Erstellen eines Themas die Methode projects.topics.create:

Die Anfrage muss mit einem Zugriffstoken im Header Authorization authentifiziert werden. So rufen Sie ein Zugriffstoken für die aktuellen Standardanmeldedaten für Anwendungen ab: gcloud auth application-default print-access-token.

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

Wobei:

  • PROJECT_ID ist die Projekt-ID.
  • TOPIC_ID ist Ihre Themen-ID.
  • Lösung:

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

    C++

    Folgen Sie der Einrichtungsanleitung für C++ in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C++ API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    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#

    Folgen Sie der Einrichtungsanleitung für C# in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    
    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

    Folgen Sie der Einrichtungsanleitung für Go in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    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

    Folgen Sie der Einrichtungsanleitung für Java in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    
    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

    Folgen Sie der Einrichtungsanleitung für PHP in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub PHP API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    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

    Folgen Sie der Einrichtungsanleitung für Python in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    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

    Folgen Sie der Einrichtungsanleitung für Ruby in der Pub/Sub-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.

    Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

    Einschränkungen für Organisationsrichtlinien

    Organisationsrichtlinien können das Erstellen von Themen einschränken. Eine Richtlinie kann beispielsweise den Nachrichtenspeicher in einer Compute Engine-Region einschränken. Um Fehler bei der Themenerstellung zu vermeiden, prüfen und aktualisieren Sie die Organisationsrichtlinien nach Bedarf, bevor Sie ein Thema erstellen.

    Wenn Ihr Projekt neu erstellt wird, warten Sie ein paar Minuten, bis die Organisationsrichtlinie initialisiert ist, bevor Sie ein Thema erstellen.

    Zu den Organisationsrichtlinien

    Weitere Informationen finden Sie unter Richtlinien für den Nachrichtenspeicher konfigurieren.

    Nächste Schritte