Pub/Sub Lite-Nachrichten nach Pub/Sub exportieren

In diesem Dokument wird beschrieben, wie Sie den automatischen Export Pub/Sub Lite-Nachrichten an Pub/Sub

Im Folgenden finden Sie einige Szenarien, in denen Sie diese Funktion verwenden können:

  • Interoperabilität zwischen Arbeitslasten, die eine Mischung aus Pub/Sub Lite verwenden und Pub/Sub.
  • Migrieren Sie eine Pub/Sub Lite-Arbeitslast zu Pub/Sub.
  • Nutzen Sie erweiterte Pub/Sub-Features wie Push-Abos und Filterung von einer vorhandenen Anwendung, die auf Pub/Sub Lite
  • Mehrere Datenpipelines konsolidieren

Übersicht

So exportieren Sie Nachrichten von Pub/Sub Lite nach Pub/Sub: erstellen Sie einen speziellen Abotyp, das sogenannte Exportabo. Eine Exportabo empfängt Nachrichten von einem Lite-Thema und konvertiert sie in Pub/Sub-Nachrichten gesendet und die konvertierten Nachrichten an einen Pub/Sub-Thema.

Diagramm zum Exportieren von Pub/Sub Lite-Nachrichten

Ein Lite-Thema kann eine Kombination aus Exportabos und Standardabos enthalten Abos. Die beiden Abotypen sind in Bezug auf Folgendes identisch: Kontingentnutzung und Reservierungsdurchsatz. Ein Exportabo verbraucht Durchsatzkapazität im Lite-Abo und wird berechnet für Durchsatz der Pub/Sub-Veröffentlichung.

Ein Exportabo verbindet ein Lite-Thema mit genau einem Pub/Sub-Thema. Für ein Lite-Thema sind jedoch mehrere Exportvorgänge möglich. Abos, die mit verschiedenen Pub/Sub-Themen verbunden sind (Fan-Out-Architektur). Sie können auch aus mehreren Lite-Themen in das Pub/Sub-Thema (Fan-in-Architektur) erstellt.

Authentifizierung

Ein Exportabo greift sowohl auf Pub/Sub Lite als auch Pub/Sub-Ressourcen Zum Erstellen eines Exportabos benötigen Sie die folgenden Berechtigungen:

  • pubsublite.subscriptions.create Die folgenden vordefinierten Rollen enthalten Folgendes: Berechtigung:

    • roles/pubsublite.admin
    • roles/pubsublite.editor

    Siehe Zugriffssteuerung für Pub/Sub Lite.

  • pubsub.topics.get Die folgenden vordefinierten Rollen enthalten diese Berechtigung:

    • roles/pubsub.admin
    • roles/pubsub.editor
    • roles/pubsub.viewer

    Siehe Zugriffssteuerung für Pub/Sub.

Kundenservicemitarbeiter

Ein Exportabo veröffentlicht ein Pub/Sub-Thema auf Ihrem Dazu wird ein Dienst-Agent.

Nachdem Sie das erste Exportabo in einem Projekt erstellt haben, wird ein Der Pub/Sub Lite-Dienst-Agent wird automatisch erstellt. Wenn Sie zusätzliche Exportabos im selben Projekt erstellen, Dienst-Agent. Der Dienst-Agent hat folgendes Namensschema: service-<your_project_number>@gcp-sa-pubsublite.iam.gserviceaccount.com

Der Dienst-Agent wurde mit Berechtigungen zum Veröffentlichen für alle erstellt Pub/Sub- und Pub/Sub Lite-Themen innerhalb derselben Projekt als Exportabo festlegen. Wenn Ihr Pub/Sub-Ziel sich in einem anderen Projekt als das Exportabo befindet, müssen Sie dem Zusätzliche Berechtigungen für den Dienst-Agent durch Hinzufügen der Rolle Pub/Sub Publisher (roles/pubsub.publisher). Sie können Berechtigungen für ein ganzes Projekt oder einem einzelnen Thema. Wir empfehlen, Berechtigungen auf Themenebene nach dem Prinzip der geringsten Berechtigung.

Weitere Informationen finden Sie unter Zugriff über die Google Cloud Console steuern Sie können auch die gcloud projects add-iam-policy-binding Befehl zum Hinzufügen von IAM-Rollen:

gcloud pubsub topics add-iam-policy-binding TOPIC_NAME \
 --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsublite.iam.gserviceaccount.com
 --role=roles/pubsub.publisher

Ersetzen Sie Folgendes:

  • TOPIC_NAME: der Name des Pub/Sub-Ziels Thema, um die IAM-Richtlinienbindung hinzuzufügen.
  • PROJECT_NUMBER: die Projektnummer des Projekt des Pub/Sub Lite-Exportabos.

Exportabo erstellen

Sie können ein Abo für Lite-Exporte über die Google Cloud Console, den Google Cloud CLI oder Pub/Sub Lite API verwenden.

Das Abo für den Lite-Export muss sich im selben Projekt und am selben Standort befinden wie das Abo für Lite-Exporte. an das sie angehängt ist. Informationen zum Erstellen des Lite-Themas finden Sie unter Lite-Themen erstellen und verwalten

Wenn Sie ein Exportabo an ein Lite-Thema anhängen, achten Sie darauf, dass alle Nachrichten, die im Lite-Thema veröffentlicht werden, sind mit Pub/Sub kompatibel. Weitere Informationen finden Sie unter Nachrichtenkompatibilität.

Nachdem ein Exportabo erstellt wurde, kann es nicht mehr in ein oder umgekehrt.

Console

  1. Rufen Sie die Seite Lite-Abos auf.

    Lite-Abos aufrufen

  2. Klicken Sie auf Lite-Abo erstellen.

  3. Geben Sie eine Lite-Abo-ID ein.

  4. Wählen Sie ein Lite-Thema aus, von dem Nachrichten empfangen werden sollen.

  5. Wählen Sie Nachrichten sofort zustellen oder Nachrichten sofort senden nach gespeichert.

  6. Wählen Sie als Typ Anfangsversatz aus.

  7. Wählen Sie In Pub/Sub-Thema exportieren aus.

  8. Wählen Sie in der Liste Destination topic (Zielthema) ein Pub/Sub-Thema aus, um die exportierten Lite-Nachrichten zu empfangen.

  9. Optional. Geben Sie ein Thema für unzustellbare Nachrichten an.

    1. Klicken Sie das Kästchen Unzustellbare Nachrichten aktivieren an.
    2. Wählen Sie ein Lite-Thema aus, das als Thema für unzustellbare Nachrichten verwendet werden soll, oder klicken Sie auf Erstellen Lite-Thema, um ein neues Thema für unzustellbare Nachrichten zu erstellen. Das Thema für unzustellbare Nachrichten muss sich am selben Standort (Zone oder Region) und Projekt wie der Export befinden Abo.
  10. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie zum Erstellen eines Exportabos die Methode gcloud pubsub lite-subscriptions create Befehl:

gcloud pubsub lite-subscriptions create SUBSCRIPTION_ID \
  --location=LOCATION \
  --topic=TOPIC_ID \
  --export-pubsub-topic=PUBSUB_TOPIC_NAME \
  --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \
  --export-desired-state=DESIRED_STATE

Ersetzen Sie Folgendes:

  • SUBSCRIPTION_ID: Die ID des Lite-Abos, das erstellt werden soll.
  • LOCATION: Der Standort des Lite-Geräts Abo.
  • TOPIC_ID: Die ID des Lite-Themas, das an das Lite-Thema angehängt werden soll Abo.
  • PUBSUB_TOPIC_NAME: der Name des Pub/Sub-Themas, das Exportieren nach. Geben Sie den vollständigen Namen an, wenn sich das Thema in einem anderen Projekt befindet: projects/my-project-id/topics/my-topic-id.
  • DEAD_LETTER_TOPIC_ID: Optional. Die ID eines Lite-Themas, das als Thema für unzustellbare Nachrichten. Das Thema für unzustellbare Nachrichten muss in der folgenden Sprache angegeben werden: denselben Standort (Zone oder Region) und Projekt wie das Exportabo.
  • DESIRED_STATE: Optional. Der Startstatus des Abos. Die folgenden Werte werden unterstützt: <ph type="x-smartling-placeholder">
      </ph>
    • active: Das Abo exportiert Lite-Nachrichten nach Pub/Sub (Standardeinstellung.)
    • paused: Der Export von Lite-Nachrichten wurde ausgesetzt.

Wenn die Anfrage erfolgreich ist, wird in der Befehlszeile eine Bestätigung angezeigt:

Created [SUBSCRIPTION_ID].

Protokoll

Senden Sie eine POST-Anfrage wie die folgende, um ein Lite-Exportabo zu erstellen: Folgendes:

POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID
Authorization: Bearer $(gcloud auth print-access-token)

Ersetzen Sie Folgendes:

  • REGION: Die Region, in der das Lite-Abo gespeichert werden soll.
  • PROJECT_NUMBER: Die Projektnummer des Projekts, das erstellt werden soll. Lite-Abo verfügbar.
  • LOCATION: Der Name eines Standorts, den Pub/Sub Lite unterstützt.
  • SUBSCRIPTION_ID: Die ID des Lite-Abos.

Geben Sie im Anfragetext die folgenden Felder an:

{
  "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID",
  "deliveryConfig": {
      "deliveryRequirement": "DELIVERY_REQUIREMENT",
  },
  "exportConfig": {
      "desiredState": "DESIRED_STATE",
      "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID",
      "pubsubConfig": {
          "topic": "PUBSUB_TOPIC_NAME"
      }
  }
}

Ersetzen Sie Folgendes:

  • DELIVERY_REQUIREMENT: Die Lieferanforderung, entweder DELIVER_AFTER_STORED oder DELIVER_IMMEDIATELY.
  • DESIRED_STATE: Der Startstatus für das Abo. Die folgende Werte werden unterstützt: <ph type="x-smartling-placeholder">
      </ph>
    • ACTIVE: Das Abo exportiert Lite-Nachrichten nach Pub/Sub
    • PAUSED: Der Export von Lite-Nachrichten wurde ausgesetzt.
  • DEAD_LETTER_TOPIC_ID: die ID eines vorhandenen Lite-Themas, das verwendet werden soll als Thema für unzustellbare Nachrichten. Das Thema muss im selben Standort (Zone oder Region) und das Projekt als Exportabo selbst.
  • PUBSUB_TOPIC_NAME: der Name des Pub/Sub-Themas, für das der Exportieren nach. Beispielformat: projects/my-project-id/topics/my-topic-id.

Wenn die Anfrage erfolgreich ist, ist die Antwort das Lite-Abo im JSON-Format:

{
  "deliveryConfig": {
      "deliveryRequirement": "DELIVERY_REQUIREMENT",
  },
  "exportConfig": {
      "desiredState": "DESIRED_STATE",
      "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID",
      "pubsubConfig": {
          "topic": "PUBSUB_TOPIC_NAME"
      },
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID",
  "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID",
}

Go

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 zu Pub/Sub Go API.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsublite"
)

func createPubsubExportSubscription(w io.Writer, projectID, region, location, topicID, subID, pubsubTopicID string) error {
	// projectID := "my-project-id"
	// region := "us-central1"
	// NOTE: location can be either a region ("us-central1") or a zone ("us-central1-a")
	// For a list of valid locations, see https://cloud.google.com/pubsub/lite/docs/locations.
	// location := "us-central1"
	// NOTE: topic and subscription must be in the same region/zone (e.g. "us-central1-a")
	// topicID := "my-topic"
	// subID := "my-subscription"
	// pubsubTopicID := "destination-topic-id"
	ctx := context.Background()
	client, err := pubsublite.NewAdminClient(ctx, region)
	if err != nil {
		return fmt.Errorf("pubsublite.NewAdminClient: %w", err)
	}
	defer client.Close()

	// Initialize the subscription to the oldest retained messages for each
	// partition.
	targetLocation := pubsublite.AtTargetLocation(pubsublite.Beginning)

	sub, err := client.CreateSubscription(ctx, pubsublite.SubscriptionConfig{
		Name:                fmt.Sprintf("projects/%s/locations/%s/subscriptions/%s", projectID, location, subID),
		Topic:               fmt.Sprintf("projects/%s/locations/%s/topics/%s", projectID, location, topicID),
		DeliveryRequirement: pubsublite.DeliverImmediately, // Can also be DeliverAfterStored.
		// Configures an export subscription that writes messages to a Pub/Sub topic.
		ExportConfig: &pubsublite.ExportConfig{
			DesiredState: pubsublite.ExportActive, // Can also be ExportPaused.
			Destination: &pubsublite.PubSubDestinationConfig{
				Topic: fmt.Sprintf("projects/%s/topics/%s", projectID, pubsubTopicID),
			},
		},
	}, targetLocation)
	if err != nil {
		return fmt.Errorf("client.CreateSubscription got err: %w", err)
	}
	fmt.Fprintf(w, "Created export subscription: %s\n", sub.Name)
	return nil
}

Java

Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.

import com.google.api.gax.rpc.AlreadyExistsException;
import com.google.cloud.pubsublite.AdminClient;
import com.google.cloud.pubsublite.AdminClientSettings;
import com.google.cloud.pubsublite.BacklogLocation;
import com.google.cloud.pubsublite.CloudRegion;
import com.google.cloud.pubsublite.CloudRegionOrZone;
import com.google.cloud.pubsublite.CloudZone;
import com.google.cloud.pubsublite.ProjectNumber;
import com.google.cloud.pubsublite.SeekTarget;
import com.google.cloud.pubsublite.SubscriptionName;
import com.google.cloud.pubsublite.SubscriptionPath;
import com.google.cloud.pubsublite.TopicName;
import com.google.cloud.pubsublite.TopicPath;
import com.google.cloud.pubsublite.proto.ExportConfig;
import com.google.cloud.pubsublite.proto.ExportConfig.PubSubConfig;
import com.google.cloud.pubsublite.proto.ExportConfig.State;
import com.google.cloud.pubsublite.proto.Subscription;
import com.google.cloud.pubsublite.proto.Subscription.DeliveryConfig;
import com.google.cloud.pubsublite.proto.Subscription.DeliveryConfig.DeliveryRequirement;
import java.util.concurrent.ExecutionException;

public class CreatePubsubExportSubscriptionExample {

  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String cloudRegion = "your-cloud-region";
    char zoneId = 'b';
    String topicId = "your-topic-id";
    String subscriptionId = "your-subscription-id";
    String pubsubTopicId = "destination-topic-id";
    long projectNumber = Long.parseLong("123456789");
    // True if using a regional location. False if using a zonal location.
    // https://cloud.google.com/pubsub/lite/docs/topics
    boolean regional = false;

    createPubsubExportSubscriptionExample(
        cloudRegion, zoneId, projectNumber, topicId, subscriptionId, pubsubTopicId, regional);
  }

  public static void createPubsubExportSubscriptionExample(
      String cloudRegion,
      char zoneId,
      long projectNumber,
      String topicId,
      String subscriptionId,
      String pubsubTopicId,
      boolean regional)
      throws Exception {

    CloudRegionOrZone location;
    if (regional) {
      location = CloudRegionOrZone.of(CloudRegion.of(cloudRegion));
    } else {
      location = CloudRegionOrZone.of(CloudZone.of(CloudRegion.of(cloudRegion), zoneId));
    }

    TopicPath topicPath =
        TopicPath.newBuilder()
            .setProject(ProjectNumber.of(projectNumber))
            .setLocation(location)
            .setName(TopicName.of(topicId))
            .build();

    SubscriptionPath subscriptionPath =
        SubscriptionPath.newBuilder()
            .setLocation(location)
            .setProject(ProjectNumber.of(projectNumber))
            .setName(SubscriptionName.of(subscriptionId))
            .build();

    com.google.pubsub.v1.TopicName pubsubTopicName =
        com.google.pubsub.v1.TopicName.of(String.valueOf(projectNumber), pubsubTopicId);

    Subscription subscription =
        Subscription.newBuilder()
            .setDeliveryConfig(
                // Possible values for DeliveryRequirement:
                // - `DELIVER_IMMEDIATELY`
                // - `DELIVER_AFTER_STORED`
                // You may choose whether to wait for a published message to be successfully written
                // to storage before the server delivers it to subscribers. `DELIVER_IMMEDIATELY` is
                // suitable for applications that need higher throughput.
                DeliveryConfig.newBuilder()
                    .setDeliveryRequirement(DeliveryRequirement.DELIVER_IMMEDIATELY))
            .setExportConfig(
                // Configures an export subscription that writes messages to a Pub/Sub topic.
                ExportConfig.newBuilder()
                    // Possible values for State:
                    // - `ACTIVE`: enable message processing.
                    // - `PAUSED`: suspend message processing.
                    .setDesiredState(State.ACTIVE)
                    .setPubsubConfig(
                        PubSubConfig.newBuilder().setTopic(pubsubTopicName.toString())))
            .setName(subscriptionPath.toString())
            .setTopic(topicPath.toString())
            .build();

    // Target location within the message backlog that the subscription should be initialized to.
    SeekTarget initialLocation = SeekTarget.of(BacklogLocation.BEGINNING);

    AdminClientSettings adminClientSettings =
        AdminClientSettings.newBuilder().setRegion(location.extractRegion()).build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources, or
    // use "try-with-close" statement to do this automatically.
    try (AdminClient adminClient = AdminClient.create(adminClientSettings)) {
      Subscription response = adminClient.createSubscription(subscription, initialLocation).get();
      System.out.println(response.getAllFields() + " created successfully.");
    } catch (ExecutionException e) {
      try {
        throw e.getCause();
      } catch (AlreadyExistsException alreadyExists) {
        System.out.println("This subscription already exists.");
      } catch (Throwable throwable) {
        throwable.printStackTrace();
      }
    }
  }
}

Python

Bevor Sie dieses Beispiel ausführen, folgen Sie den Schritten zur Einrichtung von Java in Pub/Sub Lite-Clientbibliotheken.

from google.api_core.exceptions import AlreadyExists
from google.cloud.pubsub_v1 import PublisherClient
from google.cloud.pubsublite import AdminClient, Subscription, ExportConfig
from google.cloud.pubsublite.types import (
    BacklogLocation,
    CloudRegion,
    CloudZone,
    SubscriptionPath,
    TopicPath,
)


def create_lite_pubsub_export_subscription(
    project_number,
    cloud_region="us-central1",
    zone_id="a",
    topic_id="my-topic-id",
    subscription_id="my-subscription-id",
    pubsub_topic_id="destination-topic-id",
    regional=True,
    target_location=BacklogLocation.BEGINNING,
):
    if regional:
        location = CloudRegion(cloud_region)
    else:
        location = CloudZone(CloudRegion(cloud_region), zone_id)

    topic_path = TopicPath(project_number, location, topic_id)
    subscription_path = SubscriptionPath(project_number, location, subscription_id)
    destination_topic_path = PublisherClient.topic_path(project_number, pubsub_topic_id)

    subscription = Subscription(
        name=str(subscription_path),
        topic=str(topic_path),
        delivery_config=Subscription.DeliveryConfig(
            # Possible values for delivery_requirement:
            # - `DELIVER_IMMEDIATELY`
            # - `DELIVER_AFTER_STORED`
            # You may choose whether to wait for a published message to be successfully written
            # to storage before the server delivers it to subscribers. `DELIVER_IMMEDIATELY` is
            # suitable for applications that need higher throughput.
            delivery_requirement=Subscription.DeliveryConfig.DeliveryRequirement.DELIVER_IMMEDIATELY,
        ),
        # Configures an export subscription that writes messages to a Pub/Sub topic.
        export_config=ExportConfig(
            # Possible values for desired_state:
            # - `ACTIVE`: enable message processing.
            # - `PAUSED`: suspend message processing.
            desired_state=ExportConfig.State.ACTIVE,
            pubsub_config=ExportConfig.PubSubConfig(
                topic=destination_topic_path,
            ),
        ),
    )

    # Initialize client that will be used to send requests across threads. This
    # client only needs to be created once, and can be reused for multiple requests.
    client = AdminClient(cloud_region)
    try:
        response = client.create_subscription(subscription, target_location)
        print(f"{response.name} created successfully.")
    except AlreadyExists:
        print(f"{subscription_path} already exists.")

Exportabo aktualisieren

Lite-Abos lassen sich über die Google Cloud Console aktualisieren: Google Cloud CLI oder Pub/Sub Lite API verwenden. Sie kann bis zu 30 bis die neuen Einstellungen angewendet werden.

Console

  1. Rufen Sie die Seite Lite-Abos auf.

    Lite-Abos aufrufen

  2. Klicken Sie auf die Lite-Abo-ID.

  3. Klicken Sie auf der Seite Lite-Abonnementdetails auf Bearbeiten.

gCloud

Verwenden Sie zum Aktualisieren eines Lite-Abos den Befehl gcloud pubsub lite-subscriptions update:

gcloud pubsub lite-subscriptions update SUBSCRIPTION_ID \
--location=LOCATION \
--delivery-requirement=DELIVERY_REQUIREMENT \
--export-pubsub-topic=PUBSUB_TOPIC_NAME \
--export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \
--export-desired-state=DESIRED_STATE

Ersetzen Sie Folgendes:

  • SUBSCRIPTION_ID: die ID des Lite-Abos
  • LOCATION: Der Standort des Lite-Geräts Abo.
  • DELIVERY_REQUIREMENT: Optional. Die Lieferanforderung, entweder deliver-after-stored oder deliver-immediately.
  • PUBSUB_TOPIC_NAME: Optional. Der Name des Pub/Sub-Thema, in das exportiert werden soll. Geben Sie den vollständigen Namen an, wenn sich das Thema in einem anderen Projekt befindet: projects/my-project-id/topics/my-topic-id
  • DEAD_LETTER_TOPIC_ID: die ID eines vorhandenen Lite-Themas, das verwendet werden soll als Thema für unzustellbare Nachrichten. Das Thema muss im selben Standort (Zone oder Region) und das Projekt als Exportabo selbst.
  • DESIRED_STATE: Optional. Der gewünschte Status des Abos. Die folgenden Werte werden unterstützt: <ph type="x-smartling-placeholder">
      </ph>
    • active: Das Abo exportiert Lite-Nachrichten nach Pub/Sub (Standardeinstellung.)
    • paused: Der Export von Lite-Nachrichten wurde ausgesetzt.

Wenn die Anfrage erfolgreich ist, wird in der Befehlszeile das Lite-Abo angezeigt:

Updated subscription [SUBSCRIPTION_ID].
deliveryConfig:
deliveryRequirement: DELIVERY_REQUIREMENT
exportConfig:
currentState: DESIRED_STATE
deadLetterTopic: projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID
desiredState: DESIRED_STATE
pubsubConfig:
  topic: PUBSUB_TOPIC_NAME
name: projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID
topic: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID

Protokoll

Um ein Lite-Abo zu aktualisieren, senden Sie eine PATCH-Anfrage wie die folgende:

PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID?updateMask=deliveryConfig.deliveryRequirement,exportConfig
Authorization: Bearer $(gcloud auth print-access-token)

Ersetzen Sie Folgendes:

  • REGION: Die Region, in der das Lite-Abo erstellt wurde.
  • PROJECT_NUMBER: die Projektnummer des Projekts, in dem das Lite- Abo wurde erstellt.
  • LOCATION: Der Ort, an dem das Lite-Abo erstellt wurde.
  • SUBSCRIPTION_ID: Die ID des Lite-Abos.

Geben Sie im Anfragetext die folgenden Felder an:

{
  "deliveryConfig": {
      "deliveryRequirement": "DELIVERY_REQUIREMENT",
  },
  "exportConfig": {
      "desiredState": "DESIRED_STATE",
      "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID",
      "pubsubConfig": {
          "topic": "PUBSUB_TOPIC_NAME"
      }
  }
}

Ersetzen Sie Folgendes:

  • DELIVERY_REQUIREMENT: Die Lieferanforderung, entweder DELIVER_AFTER_STORED oder DELIVER_IMMEDIATELY.
  • DESIRED_STATE: Der gewünschte Status für das Abo. Die folgende Werte werden unterstützt: <ph type="x-smartling-placeholder">
      </ph>
    • ACTIVE: Das Abo exportiert Lite-Nachrichten nach Pub/Sub
    • PAUSED: Der Export von Lite-Nachrichten wurde ausgesetzt.
  • DEAD_LETTER_TOPIC_ID: die ID eines vorhandenen Lite-Themas, das verwendet werden soll als Thema für unzustellbare Nachrichten. Das Thema muss im selben Standort (Zone oder Region) und das Projekt als Exportabo selbst.
  • PUBSUB_TOPIC_NAME: der Name des Ziels Pub/Sub-Thema. Beispielformat: projects/my-project-id/topics/my-topic-id

Wenn die Anfrage erfolgreich ist, ist die Antwort das Lite-Abo im JSON-Format:

{
"deliveryConfig": {
  "deliveryRequirement": "DELIVERY_REQUIREMENT",
},
"exportConfig": {
  "desiredState": "DESIRED_STATE",
  "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID",
  "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" }
},
"name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID",
"topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID",
}

Exportabo pausieren oder starten

Für den Export von Abos gibt es die Einstellung Gewünschter Status mit einer der folgenden Werte: zwei Werte:

  • Aktiv: Das Abo exportiert Lite-Nachrichten nach Pub/Sub.
  • Pausiert: Der Export von Lite-Nachrichten wird ausgesetzt.

So ändern Sie den gewünschten Status in der Google Cloud Console:

  1. Rufen Sie die Seite Lite-Abos auf.

    Lite-Abos aufrufen

  2. Klicken Sie auf die Lite-Abo-ID.

  3. Klicken Sie auf der Seite Lite-Abodetails auf Pausieren oder Starten.

Sie können den gewünschten Status auch mit der Google Cloud CLI oder der Pub/Sub Lite API. Weitere Informationen finden Sie unter Exportabo aktualisieren

Best Practices

In diesem Abschnitt werden einige Best Practices bei der Verwendung von Exportabos beschrieben.

Reservierungen

Wir empfehlen die Verwendung eines Exportabos mit einer reservation-Objekt, anstatt explizit die Durchsatzkapazität des Abos.

Nachrichtenkompatibilität

Wenn eine Pub/Sub Lite-Nachricht nicht kompatibel ist mit Pub/Sub ist, veröffentlicht das Exportabo die Nachricht nicht Pub/Sub Stattdessen wird die Nachricht in das Thema für unzustellbare Nachrichten verschoben, falls eine zugewiesen wurde. Wenn kein Thema für unzustellbare Nachrichten zugewiesen wurde, inkompatibel werden Nachrichten einfach verworfen.

Beachten Sie Folgendes, wenn Sie Nachrichten im Lite-Thema veröffentlichen Kompatibilitätsprobleme:

  • Keys (Schlüssel): Pub/Sub Lite-Schlüssel haben den Typ bytes, während Pub/Sub-Sortierschlüssel sind vom Typ string. Zur Gewährleistung der Kompatibilität Der Pub/Sub Lite-Schlüssel darf nur UTF-8-Zeichen enthalten.

  • Attribute: Für Nachrichtenattribute gelten die folgenden Anforderungen:

    • Für die Kompatibilität müssen alle Pub/Sub Lite-Nachrichtenattribute muss einen einzelnen Wert haben. Pub/Sub Lite unterstützt Nachrichten mit mehreren Werten, aber Pub/Sub unterstützt Einzelwertattributen.
    • Die Nachrichtenattribute dürfen die Pub/Sub-Nachrichtenlimits einschließlich der maximalen Attribute pro Nachricht und der maximalen Schlüssel- und Wertgröße pro Nachricht .

Thema für unzustellbare Nachrichten

Um inkompatible Nachrichten aufzubewahren und zu verarbeiten, empfehlen wir die Verwendung von unzustellbaren Nachrichten. . Sie können beim Erstellen des Exports ein Thema für unzustellbare Nachrichten zuweisen oder Sie aktualisieren ein bestehendes Exportabo, um ein unzustellbare Nachrichten wieder. Wenn das Abo eine inkompatible Nachricht erhält mit Pub/Sub wird die Nachricht im Thema für unzustellbare Nachrichten veröffentlicht.

Ein Thema für unzustellbare Nachrichten ist ein reguläres Pub/Sub Lite-Thema. Sie muss in denselben Speicherort und dasselbe Projekt wie das Exportabo. Außerdem muss es sich um als ein anderes als das Quellthema.

Normalerweise hat ein Thema für unzustellbare Nachrichten eine niedrige Durchsatzauslastung. Aus diesem Grund empfehlen wir, dem Thema für unzustellbare Nachrichten eine Reservierung zuzuweisen, Weisen Sie dem Thema Durchsatz zu.

Übermittlungsfehler

Ein Exportabo versucht, alle kompatiblen Nachrichten an den Pub/Sub-Thema. Wenn die Zustellung von Nachrichten fehlschlägt, ist gesperrt. Die Fehlerkategorie finden Sie in der Messwert subscription/export_status. Die folgenden Werte weisen auf einen Fehler hin:

  • PERMISSION_DENIED: Unzureichende Berechtigungen zum Exportieren von Nachrichten.
  • NOT_FOUND: Eine oder mehrere Ressourcen wurden nicht gefunden. z. B. das Ziel Thema ist nicht vorhanden.

Weitere Informationen zur Fehlerbehebung finden Sie unter Fehler beim Export von Abos beheben

Nachdem Sie den Fehler behoben haben, wird das Abo für den Export automatisch neu gestartet durch regelmäßige Wiederholungsversuche.

Preise

Pub/Sub Lite und Pub/Sub werden Ihnen in Rechnung gestellt. Ressourcen, die das Exportabo verbraucht. Insbesondere werden Ihnen für den zugewiesenen Abodurchsatz und den zugewiesenen Speicher Pub/Sub Lite-Abo, das für die Pub/Sub Lite-Thema. Die Veröffentlichung im Pub/Sub-Thema. Weitere Informationen finden Sie unter Pub/Sub – Preise

Für die Nutzung der Exportfunktion fallen keine zusätzlichen Kosten an. Preisdifferenz zwischen Pub/Sub Lite-Exportabos und Standardabos.

Probleme beim Exportieren von Abos beheben

In diesem Abschnitt finden Sie einige Tipps zur Fehlerbehebung beim Exportieren von Abos.

Das Exportabo ist pausiert

Wenn das Abo pausiert ist, werden keine Nachrichten exportiert.

So erkennen Sie dieses Problem:

  • Google Cloud Console: Sehen Sie sich die Abodetails Wenn das Abo „Pausiert“, Gewünschter Status und Aktueller Status sind Paused.

  • Messwerte: Der Messwert subscription/export_status ist PAUSED.

So beheben Sie das Problem: starten Sie das Abo.

Das Zielthema oder das Thema für unzustellbare Nachrichten wurde gelöscht

Wenn Sie das an einen Export angehängte Pub/Sub-Thema löschen oder das Thema für unzustellbare Nachrichten löschen, tritt ein Fehler auf.

So erkennen Sie dieses Problem:

  • Google Cloud Console: Sehen Sie sich die Abodetails Wenn das Thema gelöscht wurde, lautet der aktuelle Status Not found.

  • Messwerte: Der Messwert subscription/export_status. Wenn das Thema gelöscht wurde, lautet der Wert NOT_FOUND.

Prüfen Sie das Pub/Sub-Zielthema und den Bereich Thema für unzustellbare Nachrichten (falls eines konfiguriert wurde).

Wenn das Pub/Sub-Ziel gelöscht wurde, erstellen Sie das Thema neu mit mit demselben Namen. Die Veröffentlichung des Exportabos wird fortgesetzt, vorausgesetzt, die Berechtigungen nicht geändert.

Wenn das Thema für unzustellbare Nachrichten gelöscht wurde, erstellen Sie ein neues Thema für unzustellbare Nachrichten und aktualisieren Sie es das Exportabo, um darauf zu verweisen.

Inkompatible Meldungen

Wenn Nachrichten nicht mit Pub/Sub kompatibel sind, werden sie nicht exportiert.

So erkennen Sie dieses Problem:

  • Messwerte: Der Messwert subscription/unexportable_message_count gibt die Anzahl an. von inkompatiblen Nachrichten, die nicht exportiert werden konnten.

Um dieses Problem zu beheben, verwenden Sie ein Thema für unzustellbare Nachrichten, die inkompatiblen Nachrichten anzuzeigen. Prüfen Sie die Meldungen, um die Ursache zu ermitteln, dann transformieren und gegebenenfalls neu veröffentlichen. Weitere Informationen finden Sie unter Nachrichtenkompatibilität.

Export wurde gedrosselt

So erkennen Sie dieses Problem:

  • Messwerte: Der Messwert subscription/flow_control_status zeigt eine Ablaufsteuerung. Grund von NO_CLIENT_TOKENS, der angibt, dass das Limit pro Partition von Ausstehende Bytes oder Nachrichten wurden erreicht. Bis das Problem behoben ist, erhöht sich der Rückstand für zugehörige Exportabos.

Dieser Fehler kann mehrere Ursachen haben. Die meisten möglichen Ursachen treten auf, am Back-End, überprüfen Sie jedoch Folgendes:

  • Achten Sie darauf, Lite-Nachrichten mit demselben Schlüssel mit einer geringeren Häufigkeit zu veröffentlichen. als 1 MiB/s pro Schlüssel. Das Exportabo schreibt Lite-Nachrichtenschlüssel als Pub/Sub-Sortierschlüssel und Pub/Sub hat 1 MiB/s limit für jeden Reihenfolgeschlüssel. Überschreitung kann zu einer Drosselung führen.

Der Nutzer ist nicht berechtigt, diese Aktion auszuführen

Der Pub/Sub Lite-Dienst-Agent muss folgende Voraussetzungen erfüllen: Berechtigungen zum Veröffentlichen im Pub/Sub-Zielthema.

So erkennen Sie dieses Problem:

  • Google Cloud Console: Sehen Sie sich die Abodetails Wenn es Berechtigungsfehlern hat, ist der aktuelle Status Permission denied.

  • Messwerte: Der Messwert subscription/export_status ist PERMISSON_DENIED.

Dieser Fehler kann beispielsweise in folgenden Situationen auftreten:

  • Dem Pub/Sub Lite-Dienst-Agent fehlt die richtige Berechtigung oder Rolle zum Veröffentlichen von Nachrichten im Pub/Sub-Zielthema in ein anderes Projekt ein.
  • Der Dienst-Agent wurde aus der IAM-Richtlinie des Exports entfernt das übergeordnete Projekt des Abos.
  • Der Pub/Sub Lite-Dienst-Agent wird noch eingerichtet. Dienst Agent wird automatisch erstellt, wenn Sie das erste Exportabo erstellen in einem Projekt. Der Berechtigungsfehler sollte innerhalb von zehn Minuten.

Prüfen Sie, ob dem Dienst-Agent die richtige Berechtigung erteilt wurde, um das Problem zu beheben Berechtigung oder Rolle haben. Siehe Dienstmitarbeiter.

Nächste Schritte

Pub/Sub oder Pub/Sub Lite auswählen