Waiter erstellen

Auf dieser Seite wird gezeigt, wie Sie eine Waiter-Ressource erstellen. Weitere Informationen über Waiter erfahren Sie unter Grundlagen des Runtime Configurators.

Eine Waiter-Ressource wartet auf eine bestimmte Bedingung für den Erfolg oder das Fehlschlagen, bevor sie eine Antwort zurückgibt. Sie legen sowohl für den Erfolg als auch für den Fehlschlag eine Kardinalitätsbedingung fest, bei der der Waiter wartet, bis eine Anzahl an Variablen unter einem gewissen Pfadpräfix erstellt wurden. Nachdem die Variablen erstellt wurden, antwortet der Waiter. Ihr App-Code kann dann auf den Erfolg oder Fehlschlag antworten. Falls der aktuelle Status Ihrer Variablen bereits entweder der Bedingung für den Erfolg oder der für den Fehlschlag entspricht, gibt der Waiter sofort Erfolg oder Fehlschlag zurück.

Vorbereitung

Waiter erstellen

So erstellen Sie einen Waiter:

  1. Legen Sie für den Waiter die Bedingung für den Erfolg und optional die für den Fehlschlag fest.

    Der folgende Beispielcode legt beispielsweise die Bedingungen für Erfolg und Fehlschlag fest. Hier antwortet der Waiter mit Erfolg, wenn die Anzahl der Pfade unter /status/success drei entspricht, und mit Fehlschlag, wenn der Pfad unter /status/failure zwei ist:

    {
        'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
        'timeout': '360s',
        'success': {
           'cardinality': {
              'path': '/status/success',
              'number': 3
           }
        },
        'failure': {
           'cardinality': {
              'path': '/status/failure',
              'number': 2
           }
         }
    }
    

    Best Practices zum Definieren eines Waiter:

    • Pro Waiter ist nur eine Bedingung für den Erfolg und eine für den Fehlschlag zulässig.
    • Sie sollten einen Waiter pro Pfad aufrechterhalten.
    • Bedingungen für das Fehlschlagen werden immer vor Bedingungen für den Erfolg evaluiert.
    • Vermeiden Sie bei den Bedingungen Überschneidungen von Pfadpräfixen.
  2. Erstellen Sie den Waiter.

    Deployment Manager

    Legen Sie den Waiter-Typ fest, wenn Sie einen Waiter in Deployment Manager erstellen:

    runtimeconfig.v1beta1.waiter
    

    Geben Sie in den Attributen des Waiter die Werte name, location, timeout und die Endbedingungen des Waiter an:

    - name: [NAME]
      type: runtimeconfig.v1beta1.waiter
      properties:
        parent: $(ref.[CONFIG_NAME].name)
        waiter: [WAITER_NAME]
        timeout: [TIMEOUT_SEC]
        success:
          cardinality:
            path: [SUCCESS_PATH_PREFIX]
            number: [SUCCESS_NUMBER]
    

    Dabei gilt:

    • [NAME] ist der Name der Ressource.
    • [CONFIG_NAME] ist die Config-Ressource für diese Anfrage.
    • [WAITER_NAME] ist der Name für diesen Waiter.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, bis eine Zeitüberschreitung des Waiter eintritt. Verwenden Sie beispielsweise für 300 Sekunden 300s.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung überwacht wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die unter diesem Pfad für eine Auswertung als Erfolg vorhanden sein muss.

    gcloud

    Mit dem gcloud-Befehlszeilentool:

    gcloud beta runtime-config configs waiters create [WAITER_NAME] \
        --config-name [CONFIG_NAME] \
        --success-cardinality-path [SUCCESS_PATH_PREFIX] \
        --success-cardinality-number [SUCCESS_NUMBER] --timeout [TIMEOUT_SECS]
    

    Dabei gilt:

    • [WAITER_NAME] ist der Name für diesen Waiter.
    • [CONFIG_NAME] ist die Config-Ressource für diese Anfrage.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung überwacht wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die unter diesem Pfad für eine Auswertung als Erfolg vorhanden sein muss.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, bis eine Zeitüberschreitung des Waiter eintritt.

      Das gcloud-Tool gibt eine Antwort wie die folgende zurück:

      Created [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter].

      Nachdem der Waiter erstellt wurde, wird vom Tool die zugehörige Vorgangsressource abgefragt, bis der Waiter eine der möglichen Antworten zurückgibt.

      Eine vollständige Referenz zu diesem gcloud-Befehl finden Sie in der Referenzdokumentation zu runtime-config configs waiters.

    API

    Erstellen Sie in der API eine POST-Anfrage an den folgenden URI:

    https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
    • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.

    Die Nutzlast der Anfrage muss den Namen des Waiter, die Erfolgsbedingung und das Zeitlimit beinhalten:

    {
     'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
     'timeout': '[TIMEOUT_SEC]',
     'success': {
        'cardinality': {
           'path': '[SUCCESS_PATH_PREFIX]',
           'number': '[SUCCESS_NUMBER]'
        }
      }
    }
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
    • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.
    • [WAITER_NAME] ist der Name des zu erstellenden Waiter.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, bis eine Zeitüberschreitung des Waiter eintritt.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung überwacht wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die unter diesem Pfad für eine Auswertung als Erfolg vorhanden sein muss.

    Bei Erfolg gibt die Anfrage den Namen der Vorgangsobjekte zurück, die Sie zum Abschluss prüfen:

    {
        "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
    }
    

    Fragen Sie dann den Waiter ab, um regelmäßig zu testen, wann der Waiter antwortet.

    Weitere Informationen zur Methode finden Sie in der waiters().create-Dokumentation.

Waiter abfragen

Fragen Sie die verknüpften Vorgangsressourcen ab, nachdem Sie einen Waiter erstellt haben, um zu überprüfen, ob der Waiter eine Endbedingung erfüllt hat. Wenn der Waiter eine Endbedingung erfüllt oder das Zeitlimit überschritten hat, gibt der Vorgang done und eine Antwort anhand der Ergebnisse des Waiter zurück.

Verwenden Sie gcloud oder die API, um einen Waiter abzufragen.

gcloud

Wenn Sie mit dem gcloud-Befehlszeilentool eine Anfrage zum Erstellen eines Waiters senden, führt das Tool automatisch Abfragen durch und wartet auf eine Antwort des Waiter. Das Tool gibt eine Antwort wie die folgende aus, während es den Waiter abfragt:

Waiting for waiter [WAITER_NAME] to finish...

Wenn Sie nicht möchten, dass das Tool den Waiter nach der Erstellung abfragt, fügen Sie der Erstellungsanfrage das Flag --async hinzu.

API

Stellen Sie in der REST API eine GET-Anfrage an den folgenden URI, um den Status des Waiter-Vorgangs zu erhalten:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]

Dabei gilt:

  • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
  • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.
  • [WAITER_NAME] ist der Name des abzufragenden Waiter.

Wenn der Vorgang noch läuft, gibt die API eine Antwort wie die folgende, ohne Status, aus:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}

Wenn der Vorgang abgeschlossen ist, wird er als done markiert und gibt eine der Antworten zurück, die im Abschnitt Waiter-Antworten beschrieben sind.

Weitere Informationen zur Methode finden Sie in der waiters().create-Dokumentation.

Waiter-Antworten

Erfolgreiche Endbedingung

Wenn der Waiter eine erfolgreiche Endbedingung erfüllt, gibt der Vorgang folgende Waiter-Ressource zurück:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Waiter",
    "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]",
    "timeout": "360.000s",
    "failure": {
      "cardinality": {
        "path": "[SUCCESS_PATH_PREFIX]",
        "number": "[SUCCESS_NUMBER]"
      }
    },
    "success": {
      "cardinality": {
        "path": "[FAILURE_PATH_PREFIX]",
        "number": [FAILURE_NUMBER]
      }
    },
    "createTime": "2016-04-12T18:02:13.316695490Z",
    "done": true
  }
}

Fehlerbedingung

Wenn der Waiter eine fehlgeschlagene Endbedingung erfüllt, gibt der Vorgang einen Fehler zurück:

Fehlerbedingung wurde erfüllt

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 9,
    "message": "Failure condition satisfied."
  }
}

Zeitüberschreitung des Waiters

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 4,
    "message": "Timeout expired."
  }
}

Weitere Informationen