Thema erstellen

In Pub/Sub ist ein Thema eine benannte Ressource, die einen Feed von Nachrichten darstellt. Sie müssen ein Thema erstellen, bevor Sie Nachrichten veröffentlichen oder es abonnieren können. Pub/Sub unterstützt zwei Arten von Themen: Standardthemen und Importthemen.

In diesem Dokument wird beschrieben, wie Sie ein Pub/Sub-Standardthema erstellen. Weitere Informationen zu Importthemen und zum Erstellen von Importthemen finden Sie unter Importthemen.

Sie können ein Thema über die Google Cloud Console, die Google Cloud CLI, die Clientbibliothek oder die Pub/Sub API erstellen.

Hinweis

Erforderliche Rollen und Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „Pub/Sub-Bearbeiter“ (roles/pubsub.editor) für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Themas benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigungen, die zum Erstellen eines Themas erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen , um die notwendigen Berechtigungen anzuzeigen, die erforderlich sind:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind zum Erstellen eines Themas erforderlich:

  • Erteilen Sie diese Berechtigung, um ein Thema für das Projekt zu erstellen: pubsub.topics.create

Sie können 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 es an ein Thema anhängen, das sich in einem anderen Projekt befindet. 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 seine Eigenschaften angeben.

Standardabo hinzufügen

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

  • Abo-ID von -sub
  • Pull-Zustellungstyp
  • Nachrichtenaufbewahrung für sieben Tage
  • Ablauf nach 31 Tagen Inaktivität
  • Bestätigungsfrist von 10 Sekunden
  • Richtlinie für sofortige Wiederholung

Schema verwenden

Ein Schema ist ein Format, dem das Feld für Nachrichtendaten entsprechen muss. Ein Schema ist ein Vertrag zwischen dem Publisher und dem Abonnenten, den Pub/Sub erzwingt. Themenschemas tragen dazu bei, Nachrichtentypen und Berechtigungen zu standardisieren, damit sie von verschiedenen Teams in Ihrer Organisation verwendet werden können. Pub/Sub erstellt eine zentrale Autorität für Nachrichtentypen und Berechtigungen. Informationen zum Erstellen eines Themas mit einem Schema finden Sie unter Schemaübersicht.

Aufnahme aktivieren

Wenn Sie diese Eigenschaft aktivieren, können Sie Streamingdaten aus externen Quellen in ein Thema aufnehmen, um die Funktionen von Google Cloudzu nutzen. Informationen zum Erstellen eines Importthemas für die Aufnahme finden Sie unter:

Aufbewahrung von Themennachrichten aktivieren

Standardmäßig verwirft ein Pub/Sub-Thema Nachrichten, sobald sie von allen mit dem Thema verknüpften Abos bestätigt wurden. Optional können Sie ein Thema so konfigurieren, dass Nachrichten bis zu 31 Tage lang aufbewahrt werden. Die Mindestaufbewahrungsdauer beträgt 10 Minuten.

Mit der Nachrichtenaufbewahrung können Abos zuvor bestätigte Nachrichten oder Nachrichten wiedergeben, die veröffentlicht wurden, bevor Sie das Abo erstellt haben. Weitere Informationen finden Sie unter Nachrichten mit „Suchen“ wiedergeben und löschen.

Die Speicherkosten für die vom Thema aufbewahrten Nachrichten werden dem Projekt des Themas in Rechnung gestellt. Nach Ablauf der Aufbewahrungsdauer der Nachricht kann Pub/Sub die Nachricht unabhängig vom Bestätigungsstatus verwerfen.

Wenn Sie Messwerte zu aufbewahrten Nachrichten aufrufen möchten, verwenden Sie die folgenden Cloud Monitoring-Messwerte:

Daten der Exportnachricht an BigQuery

Wenn Sie diese Eigenschaft aktivieren, können Sie ein BigQuery-Abo erstellen, das Nachrichten beim Empfang in eine vorhandene BigQuery-Tabelle schreibt. Sie müssen keinen separaten Abonnentenclient konfigurieren. Weitere Informationen zu BigQuery-Abos finden Sie unter BigQuery-Abos.

Nachrichtendaten in Cloud Storage sichern

Wenn Sie diese Eigenschaft aktivieren, können Sie ein Cloud Storage-Abo erstellen, das Nachrichten beim Empfang in eine vorhandene Cloud Storage-Tabelle schreibt. Sie müssen keinen separaten Abonnentenclient konfigurieren. Weitere Informationen zu Cloud Storage-Abos finden Sie unter Cloud Storage-Abos.

Transformationen

Mit SMTs für Themen können Sie direkt in Pub/Sub einfache Änderungen an Nachrichtendaten und -attributen vornehmen. Mit dieser Funktion können Sie Daten bereinigen, filtern oder das Format konvertieren, bevor die Nachrichten im Thema veröffentlicht werden.

Weitere Informationen zu SMTs finden Sie unter SMTs – Übersicht.

Google-owned and Google-managed encryption key

Gibt an, dass das Thema mit Google-owned and Google-managed encryption keysverschlüsselt wird. Pub/Sub verschlüsselt Nachrichten mit Google-owned and Google-managed encryption keys standardmäßig. Wenn Sie diese Option auswählen, bleibt das Standardverhalten erhalten. Google übernimmt die Schlüsselverwaltung und -rotation automatisch, sodass Ihre Nachrichten immer mit der stärksten verfügbaren Verschlüsselung geschützt sind. Für diese Option ist keine weitere Konfiguration erforderlich. Weitere Informationen zu Google-owned and Google-managed encryption keys, finden Sie unter Standardverschlüsselung mit Google-owned and Google-managed encryption keys.

Cloud KMS-Schlüssel

Gibt an, ob das Thema mit einem vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) verschlüsselt wird. Pub/Sub verschlüsselt Nachrichten standardmäßig mit Google-owned and Google-managed encryption keys . Wenn Sie diese Option angeben, verwendet Pub/Sub das Envelope-Verschlüsselungsmuster mit CMEK. Bei diesem Ansatz werden die Nachrichten nicht von Cloud KMS verschlüsselt. Stattdessen verschlüsselt Cloud KMS die Data Encryption Keys (DEKs), die von Pub/Sub für jedes Thema erstellt wurden. Pub/Sub verschlüsselt die Nachrichten mit dem neuesten DEK, der für das Thema generiert wurde. Pub/Sub entschlüsselt die Nachrichten kurz vor der Zustellung an Abonnenten. Weitere Informationen zum Erstellen eines Schlüssels finden Sie unter Nachrichtenverschlüsselung konfigurieren.

Thema erstellen

Sie müssen ein Thema erstellen, bevor Sie Nachrichten veröffentlichen oder es abonnieren können.

Console

So erstellen Sie ein Thema:

  1. Rufen Sie in der Google Cloud Console die Seite Thema erstellen von Pub/Sub auf.

    Thema erstellen

  2. Geben Sie im Feld Themen-ID eine ID für das Thema ein. Weitere Informationen zum Benennen von Themen finden Sie in den Benennungsrichtlinien.

  3. Wenn Sie ein Standardabo für das Thema erstellen möchten, wählen Sie Standardabo hinzufügen aus. Diese Option ist standardmäßig aktiviert.

  4. Optional. Wenn Sie ein Schema mit dem Thema verwenden möchten, klicken Sie auf Schema verwenden und geben Sie das Schema an. Weitere Informationen finden Sie unter Schema erstellen und zuordnen, wenn Sie ein Thema erstellen.

  5. Lassen Sie für ein Standardthema die Option Aufnahme aktivieren deaktiviert.

  6. Optional. Wenn Sie Nachrichten nach der Veröffentlichung aufbewahren möchten, wählen Sie Nachrichtenaufbewahrung aktivieren aus. Wählen Sie die Aufbewahrungsdauer in Tagen, Stunden und Minuten aus. Weitere Informationen finden Sie unter Nachrichtenaufbewahrung aktivieren.

  7. Optional. Wenn Sie veröffentlichte Nachrichten in eine BigQuery-Tabelle exportieren möchten, wählen Sie Daten in BigQuery exportieren aus und geben Sie die Details für die Tabelle ein. Weitere Informationen finden Sie unter BigQuery-Abos erstellen.

  8. Optional. Wenn Sie veröffentlichte Nachrichten in einem Cloud Storage-Bucket sichern möchten, wählen Sie Nachrichtendaten in Cloud Storage sichern aus und geben Sie die Details für den Cloud Storage-Bucket ein. Weitere Informationen finden Sie unter Cloud Storage-Abos erstellen.

  9. Optional. Fügen Sie unter Transformationen eine oder mehrere Single Message Transforms (SMTs) hinzu, um Nachrichtendaten zu bearbeiten und zu filtern. Weitere Informationen finden Sie unter Thema mit SMTs erstellen.

  10. Optional. Wenn Sie einen kundenverwalteten Verschlüsselungsschlüssel (CMEK) zum Verschlüsseln von Nachrichten verwenden möchten, wählen Sie Cloud KMS-Schlüssel aus. Standardmäßig verwendet Pub/Sub die Standardverschlüsselung von Google, für die kein CMEK erforderlich ist. Weitere Informationen finden Sie unter Nachrichtenverschlüsselung konfigurieren.

  11. Optional. Wenn Sie die mit dem Thema verknüpften Schlüssel verwalten möchten, klicken Sie auf Schlüssel verwalten. Weitere Informationen finden Sie unter Tags – Übersicht.

  12. Klicken Sie auf Thema erstellen.

gcloud

  1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

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

    gcloud pubsub topics create TOPIC_ID
    

REST

Verwenden Sie die projects.topics.create Methode:

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 die Themen-ID.

Response:

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

C++

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.

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#

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.


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

Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (Version 2) verwendet. Wenn Sie noch die Version 1 verwenden, finden Sie weitere Informationen im Migrationsleitfaden zu Version 2. Eine Liste mit Codebeispielen für Version 1 finden Sie unter Veraltete Codebeispiele.

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.

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

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.


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

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.

/**
 * 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

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Node.js in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.

/**
 * 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 unter Schnellstart: Clientbibliotheken verwenden, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub PHP API.

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

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.

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

Im folgenden Beispiel wird die Ruby Pub/Sub-Clientbibliothek Version 3 verwendet. Wenn Sie noch die Version 2 verwenden, finden Sie weitere Informationen im Migrationsleitfaden zu Version 3. Eine Liste mit Codebeispielen für Ruby Version 2 finden Sie unter Veraltete Codebeispiele.

Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Ruby in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.

# 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."

Einschränkungen für Organisationsrichtlinien

Organisationsrichtlinien können die Erstellung von Themen einschränken. So kann eine Richtlinie beispielsweise die Speicherung von Nachrichten 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 wurde, warten Sie einige Minuten, bis die Organisationsrichtlinie initialisiert wurde, bevor Sie ein Thema erstellen.

Zu den Organisationsrichtlinien

Weitere Informationen finden Sie unter Richtlinien für die Speicherung von Nachrichten konfigurieren.

Nächste Schritte

Apache Kafka® ist eine eingetragene Marke der Apache Software Foundation oder ihrer Tochtergesellschaften in den USA und/oder anderen Ländern.