Teilen über


Azure-Datenbank für MySQL-Triggerbindung für Azure Functions

Azure Database for MySQL trigger bindings monitor the user table for changes (inserts and updates) and invoke the function with updated row data.

Azure Database for MySQL trigger bindings use az_func_updated_at and column data to monitor the user table for changes. Daher müssen Sie die Tabellenstruktur ändern, um die Änderungsnachverfolgung in der MySQL-Tabelle zu ermöglichen, bevor Sie die Triggerunterstützung verwenden. Sie können die Änderungsnachverfolgung für eine Tabelle über die folgende Abfrage aktivieren. Aktivieren Sie sie z. B. in der Products Tabelle:

ALTER TABLE Products
ADD az_func_updated_at TIMESTAMP DEFAULT 
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Die Tabelle für Leases enthält alle Spalten, die dem Primärschlüssel aus der Benutzertabelle und drei weiteren Spalten entsprechen: az_func_AttemptCount, , az_func_LeaseExpirationTimeund az_func_SyncCompletedTime. Wenn eine der Primärschlüsselspalten denselben Namen aufweist, ist das Ergebnis eine Fehlermeldung, die Konflikte auflistet. In diesem Fall müssen die aufgelisteten Primärschlüsselspalten umbenannt werden, damit der Trigger funktioniert.

Übersicht über die Funktionen

Wenn die Triggerfunktion gestartet wird, werden zwei separate Schleifen initiiert: die Änderungsabfragungsschleife und die Leaseverlängerungsschleife. Diese Schleifen werden kontinuierlich ausgeführt, bis die Funktion beendet wird.

Die Azure-Datenbank für MySQL-Triggerbindung verwendet die Abrufschleife, um nach Änderungen zu suchen. Die Abrufschleife löst die Benutzerfunktion aus, wenn Änderungen erkannt werden. Auf hoher Ebene sieht die Schleife wie im folgenden Beispiel aus:

while (true) {
    1. Get list of changes on table - up to a maximum number controlled by the MySql_Trigger_MaxBatchSize setting
    2. Trigger function with list of changes
    3. Wait for delay controlled by MySql_Trigger_PollingIntervalMs setting
}

Änderungen werden in der Reihenfolge verarbeitet, in der sie vorgenommen werden. Die ältesten Änderungen werden zuerst verarbeitet. Berücksichtigen Sie die folgenden Punkte bei der Änderungsverarbeitung:

  • Wenn Änderungen in mehreren Zeilen gleichzeitig auftreten, basiert die genaue Reihenfolge, in der sie an die Funktion gesendet werden, auf der aufsteigenden Reihenfolge der az_func_updated_at Spalten und Primärschlüsselspalten.
  • Änderungen werden für eine Zeile in batched. Wenn mehrere Änderungen in einer Zeile zwischen jeder Iteration der Schleife auftreten, wird nur der neueste Änderungseintrag berücksichtigt, der für diese Zeile vorhanden ist.

Hinweis

Derzeit werden verwaltete Identitäten für Verbindungen zwischen Azure-Funktionen und Azure-Datenbank für MySQL nicht unterstützt.

Beispielverwendung

Weitere Beispiele für den Azure-Datenbank für MySQL-Trigger sind im GitHub-Repository verfügbar.

Das Beispiel bezieht sich auf eine Product-Klasse und eine entsprechende Datenbanktabelle:

namespace AzureMySqlSamples.Common
{
    public class Product
    {
        public int? ProductId { get; set; }

        public string Name { get; set; }

        public int Cost { get; set; }

        public override bool Equals(object obj)
        {
            if (obj is Product)
            {
                var that = obj as Product;
                return this.ProductId == that.ProductId && this.Name == that.Name && this.Cost == that.Cost;
            }
            return false;
        }
    }
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Sie aktivieren die Änderungsnachverfolgung in der Datenbank, indem Sie der Tabelle eine Spalte hinzufügen:

ALTER TABLE <table name>  
ADD COLUMN az_func_updated_at TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Die Azure-Datenbank für MySQL-Trigger bindet IReadOnlyList<MySqlChange<T>>an , an die Objekte aufgelistet werden MySqlChange . Jedes Objekt verfügt über zwei Eigenschaften:

  • Item: Das Element, das geändert wurde. Der Typ des Elements sollte dem Tabellenschema entsprechen, wie in der ToDoItem Klasse zu sehen.
  • Operation: Ein Wert aus der MySqlChangeOperation Enumeration. Der mögliche Wert ist Update sowohl für Einfügungen als auch für Aktualisierungen.

Das folgende Beispiel zeigt eine C#-Funktion , die aufgerufen wird, wenn Änderungen in der Product Tabelle auftreten:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.MySql;
using Microsoft.Extensions.Logging;
using AzureMySqlSamples.Common;

namespace AzureMySqlSamples.TriggerBindingSamples
{
        private static readonly Action<ILogger, string, Exception> _loggerMessage = LoggerMessage.Define<string>(LogLevel.Information, eventId: new EventId(0, "INFO"), formatString: "{Message}");

        [Function(nameof(ProductsTrigger))]
        public static void Run(
            [MySqlTrigger("Products", "MySqlConnectionString")]
            IReadOnlyList<MySqlChange<Product>> changes, FunctionContext context)
        {
            ILogger logger = context.GetLogger("ProductsTrigger");
            // The output is used to inspect the trigger binding parameter in test methods.
            foreach (MySqlChange<Product> change in changes)
            {
                Product product = change.Item;
                _loggerMessage(logger, $"Change operation: {change.Operation}", null);
                _loggerMessage(logger, $"Product Id: {product.ProductId}, Name: {product.Name}, Cost: {product.Cost}", null);
            }
        }
}

Beispielverwendung

Weitere Beispiele für den Azure-Datenbank für MySQL-Trigger sind im GitHub-Repository verfügbar.

Das Beispiel bezieht sich auf eine Product Klasse, eine MySqlChangeProduct Klasse, eine MySqlChangeOperation Enumeration und eine entsprechende Datenbanktabelle.

In einer separaten Datei mit dem Namen Product.java:

package com.function.Common;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Product {
    @JsonProperty("ProductId")
    private int ProductId;
    @JsonProperty("Name")
    private String Name;
    @JsonProperty("Cost")
    private int Cost;

    public Product() {
    }

    public Product(int productId, String name, int cost) {
        ProductId = productId;
        Name = name;
        Cost = cost;
    }
}

In einer separaten Datei mit dem Namen MySqlChangeProduct.java:

package com.function.Common;

public class MySqlChangeProduct {
    private MySqlChangeOperation Operation;
    private Product Item;

    public MySqlChangeProduct() {
    }

    public MySqlChangeProduct(MySqlChangeOperation operation, Product item) {
        this.Operation = operation;
        this.Item = item;
    }
}

In einer separaten Datei mit dem Namen MySqlChangeOperation.java:

package com.function.Common;

import com.google.gson.annotations.SerializedName;

public enum MySqlChangeOperation {
    @SerializedName("0")
    Update
}
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Sie aktivieren die Änderungsnachverfolgung in der Datenbank, indem Sie der Tabelle die folgende Spalte hinzufügen:

ALTER TABLE <table name>  
ADD COLUMN az_func_updated_at TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Der Azure-Datenbank für MySQL-Trigger bindet MySqlChangeProduct[]an ein Array von MySqlChangeProduct Objekten. Jedes Objekt verfügt über zwei Eigenschaften:

  • item: Das Element, das geändert wurde. Der Typ des Elements sollte dem Tabellenschema entsprechen, wie in der Product Klasse zu sehen.
  • operation: Ein Wert aus der MySqlChangeOperation Enumeration. Der mögliche Wert ist Update sowohl für Einfügungen als auch für Aktualisierungen.

Das folgende Beispiel zeigt eine Java-Funktion, die aufgerufen wird, wenn Änderungen in der Product Tabelle auftreten:

/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 */

package com.function;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.mysql.annotation.MySqlTrigger;
import com.function.Common.MySqlChangeProduct;
import com.google.gson.Gson;

import java.util.logging.Level;

public class ProductsTrigger {
    @FunctionName("ProductsTrigger")
    public void run(
            @MySqlTrigger(
                name = "changes",
                tableName = "Products",
                connectionStringSetting = "MySqlConnectionString")
                MySqlChangeProduct[] changes,
            ExecutionContext context) {

        context.getLogger().log(Level.INFO, "MySql Changes: " + new Gson().toJson(changes));
    }
}

Beispielverwendung

Weitere Beispiele für den Azure-Datenbank für MySQL-Trigger sind im GitHub-Repository verfügbar.

Das Beispiel bezieht sich auf eine Product-Datenbanktabelle:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Sie aktivieren die Änderungsnachverfolgung in der Datenbank, indem Sie der Tabelle eine Spalte hinzufügen:

ALTER TABLE <table name>  
ADD COLUMN az_func_updated_at TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Die Azure-Datenbank für MySQL-Trigger bindet Productan , an die Objekte aufgelistet werden. Jedes Objekt verfügt über zwei Eigenschaften:

  • item: Das Element, das geändert wurde. Die Struktur des Elements folgt dem Tabellenschema.
  • operation: Der mögliche Wert gilt Update sowohl für Einfügungen als auch für Aktualisierungen.

Das folgende Beispiel zeigt eine PowerShell-Funktion, die aufgerufen wird, wenn Änderungen in der Product Tabelle auftreten.

Das folgende Beispiel bindet Daten in der Datei function.json:

{
    "bindings": [
      {
        "name": "changes",
        "type": "mysqlTrigger",
        "direction": "in",
        "tableName": "Products",
        "connectionStringSetting": "MySqlConnectionString"
      }
    ],
    "disabled": false
  }

Im Abschnitt "Konfiguration" werden diese Eigenschaften erläutert.

Das folgende Beispiel ist PowerShell-Beispielcode für die Funktion in der datei run.ps1:

using namespace System.Net

param($changes)
# The output is used to inspect the trigger binding parameter in test methods.
# Use -Compress to remove new lines and spaces for testing purposes.
$changesJson = $changes | ConvertTo-Json -Compress
Write-Host "MySql Changes: $changesJson"

Beispielverwendung

Weitere Beispiele für den Azure-Datenbank für MySQL-Trigger sind im GitHub-Repository verfügbar.

Das Beispiel bezieht sich auf eine Product-Datenbanktabelle:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Sie aktivieren die Änderungsnachverfolgung in der Datenbank, indem Sie der Tabelle eine Spalte hinzufügen:

ALTER TABLE <table name>  
ADD COLUMN az_func_updated_at TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Der Azure-Datenbank für MySQL-Trigger bindet Changesan ein Array von Objekten. Jedes Objekt verfügt über zwei Eigenschaften:

  • item: Das Element, das geändert wurde. Die Struktur des Elements folgt dem Tabellenschema.
  • operation: Der mögliche Wert gilt Update sowohl für Einfügungen als auch für Aktualisierungen.

Das folgende Beispiel zeigt eine JavaScript-Funktion, die aufgerufen wird, wenn Änderungen in der Product Tabelle auftreten.

Das folgende Beispiel bindet Daten in der Datei function.json:

{
    "bindings": [
      {
        "name": "changes",
        "type": "mysqlTrigger",
        "direction": "in",
        "tableName": "Products",
        "connectionStringSetting": "MySqlConnectionString",
      }
    ],
    "disabled": false
  }

Im Abschnitt "Konfiguration" werden diese Eigenschaften erläutert.

Das folgende Beispiel ist Beispiel-JavaScript-Code für die Funktion in der index.js Datei:

module.exports = async function (context, changes) {
    context.log(`MySql Changes: ${JSON.stringify(changes)}`)
}

Beispielverwendung

Weitere Beispiele für den Azure-Datenbank für MySQL-Trigger sind im GitHub-Repository verfügbar.

Das Beispiel bezieht sich auf eine Product-Datenbanktabelle:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Sie aktivieren die Änderungsnachverfolgung in der Datenbank, indem Sie der Tabelle eine Spalte hinzufügen:

ALTER TABLE <table name>  
ADD COLUMN az_func_updated_at TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Hinweis

Sie müssen Azure Functions Version 1.22.0b4 für Python verwenden.

Der Azure-Datenbank für MySQL-Trigger bindet an eine Variable mit dem Namen Product, die Objekte auflistet. Jedes Objekt verfügt über zwei Eigenschaften:

  • item: Das Element, das geändert wurde. Die Struktur des Elements folgt dem Tabellenschema.
  • operation: Der mögliche Wert gilt Update sowohl für Einfügungen als auch für Aktualisierungen.

Das folgende Beispiel zeigt eine Python-Funktion, die aufgerufen wird, wenn Änderungen in der Product Tabelle auftreten.

Das folgende Beispiel ist Python-Beispielcode für die function_app.py-Datei:

import json
import logging
import azure.functions as func

app = func.FunctionApp()

# The function is triggered when a change (insert, update)
# is made to the Products table.
@app.function_name(name="ProductsTrigger")
@app.mysql_trigger(arg_name="products",
table_name="Products",
connection_string_setting="MySqlConnectionString")

def products_trigger(products: str) -> None:
logging.info("MySQL Changes: %s", json.loads(products))

Attribute

Attributeigenschaft BESCHREIBUNG
TableName Erforderlich. Der Name der Tabelle, die der Trigger überwacht.
ConnectionStringSetting Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, die die Tabelle enthält, die auf Änderungen überwacht wird. Der Name der Verbindungszeichenfolgeneinstellung entspricht der Anwendungseinstellung (in local.settings.json für die lokale Entwicklung), die die Verbindungszeichenfolge mit Der Azure-Datenbank für MySQL enthält.
LeasesTableName Wahlfrei. Der Name der Tabelle zum Speichern von Leases. Wenn er nicht angegeben ist, lautet Leases_{FunctionId}_{TableId}der Name .

Anmerkungen

Verwenden Sie in der Java-Funktionslaufzeitbibliothek die @MySQLTrigger Anmerkung für Parameter, deren Werte aus der Azure-Datenbank für MySQL stammen. Diese Anmerkung unterstützt die folgenden Elemente:

Element BESCHREIBUNG
name Erforderlich. Der Name des Parameters, mit dem der Trigger eine Bindung erstellt.
tableName Erforderlich. Der Name der Tabelle, die der Trigger überwacht.
connectionStringSetting Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, die die Tabelle enthält, die auf Änderungen überwacht wird. Der Name der Verbindungszeichenfolgeneinstellung entspricht der Anwendungseinstellung (in local.settings.json für die lokale Entwicklung), die die Verbindungszeichenfolge mit Der Azure-Datenbank für MySQL enthält.
LeasesTableName Wahlfrei. Der Name der Tabelle zum Speichern von Leases. Wenn er nicht angegeben ist, lautet Leases_{FunctionId}_{TableId}der Name .

Konfiguration

In der folgenden Tabelle werden die Bindungskonfigurationseigenschaften erläutert, die Sie in der datei function.json festlegen:

Eigentum BESCHREIBUNG
name Erforderlich. Der Name des Parameters, mit dem der Trigger eine Bindung erstellt.
type Erforderlich. Muss auf MysqlTrigger festgelegt sein.
direction Erforderlich. Muss auf in festgelegt sein.
tableName Erforderlich. Der Name der Tabelle, die der Trigger überwacht.
connectionStringSetting Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, die die Tabelle enthält, die auf Änderungen überwacht wird. Der Name der Verbindungszeichenfolgeneinstellung entspricht der Anwendungseinstellung (in local.settings.json für die lokale Entwicklung), die die Verbindungszeichenfolge mit Der Azure-Datenbank für MySQL enthält.
LeasesTableName Wahlfrei. Der Name der Tabelle zum Speichern von Leases. Wenn er nicht angegeben ist, lautet Leases_{FunctionId}_{TableId}der Name .

Optionale Konfiguration

Sie können die folgenden optionalen Einstellungen für den Azure-Datenbank für MySQL-Trigger für die lokale Entwicklung oder für Cloudbereitstellungen konfigurieren.

host.json

In diesem Abschnitt werden die Konfigurationseinstellungen beschrieben, die für diese Bindung in Version 2.x und höher verfügbar sind. Einstellungen in der Datei „host.json“ gelten für alle Funktionen in einer Funktions-App-Instanz. Weitere Informationen zu Konfigurationseinstellungen für Funktionen-Apps finden Sie unter host.json Referenz für Azure Functions.

Einstellung Standard BESCHREIBUNG
MaxBatchSize 100 Die maximale Anzahl von Änderungen, die mit jeder Iteration der Triggerschleife verarbeitet werden, bevor sie an die ausgelöste Funktion gesendet werden.
PollingIntervalMs 1000 Die Verzögerung in Millisekunden zwischen der Verarbeitung jedes Änderungsbatches. (1.000 ms beträgt 1 Sekunde.)
MaxChangesPerWorker 1000 Die obere Grenze für die Anzahl der ausstehenden Änderungen in der Benutzertabelle, die pro Anwendungsmitarbeiter zulässig sind. Wenn die Anzahl der Änderungen diesen Grenzwert überschreitet, kann dies zu einer Skalierung führen. Die Einstellung gilt nur für Azure-Funktions-Apps mit aktivierter laufzeitgesteuerter Skalierung.

Beispieldatei host.json

Hier ist ein Beispiel host.json Datei mit den optionalen Einstellungen:

{
  "version": "2.0",
  "extensions": {
      "MySql": {
        "MaxBatchSize": 300,
        "PollingIntervalMs": 1000,
        "MaxChangesPerWorker": 100
      }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "default": "Trace"
    }
  }
}

local.setting.json

Die local.settings.json Datei speichert App-Einstellungen und -Einstellungen, die von lokalen Entwicklungstools verwendet werden. Einstellungen in der Datei „local.settings.json“ werden nur bei der lokalen Ausführung Ihrer Projekte verwendet. Wenn Sie Ihr Projekt in Azure veröffentlichen, müssen Sie auch alle erforderlichen Einstellungen zu den App-Einstellungen für die Funktions-App hinzufügen.

Wichtig

Da die local.settings.json Datei geheime Schlüssel enthalten kann, z. B. Verbindungszeichenfolgen, sollten Sie sie niemals in einem Remote-Repository speichern. Tools, die Azure Functions unterstützen, bieten Möglichkeiten zum Synchronisieren von Einstellungen in der local.settings.json Datei mit den App-Einstellungen in der Funktions-App, für die Ihr Projekt bereitgestellt wird.

Einstellung Standard BESCHREIBUNG
MySql_Trigger_BatchSize 100 Die maximale Anzahl von Änderungen, die mit jeder Iteration der Triggerschleife verarbeitet werden, bevor sie an die ausgelöste Funktion gesendet werden.
MySql_Trigger_PollingIntervalMs 1000 Die Verzögerung in Millisekunden zwischen der Verarbeitung jedes Änderungsbatches. (1.000 ms beträgt 1 Sekunde.)
MySql_Trigger_MaxChangesPerWorker 1000 Die obere Grenze für die Anzahl der ausstehenden Änderungen in der Benutzertabelle, die pro Anwendungsmitarbeiter zulässig sind. Wenn die Anzahl der Änderungen diesen Grenzwert überschreitet, kann dies zu einer Skalierung führen. Die Einstellung gilt nur für Azure-Funktions-Apps mit aktivierter laufzeitgesteuerter Skalierung.

Beispieldatei local.settings.json

Hier ist ein Beispiel local.settings.json Datei mit den optionalen Einstellungen:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MySqlConnectionString": "",
    "MySql_Trigger_MaxBatchSize": 300,
    "MySql_Trigger_PollingIntervalMs": 1000,
    "MySql_Trigger_MaxChangesPerWorker": 100
  }
}

Einrichten von Änderungsnachverfolgung (erforderlich)

Zum Einrichten der Änderungsnachverfolgung für die Verwendung mit dem Azure Database for MySQL-Trigger müssen Sie eine Spalte in einer Tabelle mithilfe einer Funktion hinzufügen. Sie können diese Schritte von jedem MySQL-Tool ausführen, das das Ausführen von Abfragen unterstützt, einschließlich Visual Studio Code oder Azure Data Studio.

Azure Database for MySQL trigger bindings use az_func_updated_at and column data to monitor the user table for changes. Daher müssen Sie die Tabellenstruktur ändern, um die Änderungsnachverfolgung in der MySQL-Tabelle zu ermöglichen, bevor Sie die Triggerunterstützung verwenden. Sie können die Änderungsnachverfolgung für eine Tabelle über die folgende Abfrage aktivieren. Aktivieren Sie sie z. B. in der Products Tabelle:

ALTER TABLE Products;
ADD az_func_updated_at 
TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

Die Tabelle für Leases enthält alle Spalten, die dem Primärschlüssel aus der Benutzertabelle und zwei weiteren Spalten entsprechen: az_func_AttemptCount und az_func_LeaseExpirationTime. Wenn eine der Primärschlüsselspalten denselben Namen aufweist, ist das Ergebnis eine Fehlermeldung, die Konflikte auflistet. In diesem Fall müssen die aufgelisteten Primärschlüsselspalten umbenannt werden, damit der Trigger funktioniert.

Aktivieren runtimegesteuerter Skalierung

Optional können Ihre Funktionen basierend auf der Anzahl an Änderungen, deren Bearbeitung in der Benutzertabelle aussteht, automatisch skaliert werden. Damit Ihre Funktionen beim Verwenden von Azure Database for MySQL-Triggern ordnungsgemäß im Premium-Plan skaliert werden können, müssen Sie die Überwachung der Laufzeitskala aktivieren.

  1. Wählen Sie im Azure-Portal in Ihrer Funktions-App " Konfiguration" aus.

  2. Wählen Sie auf der Registerkarte "Funktionslaufzeiteinstellungen " für die Skalierungsüberwachung zur Laufzeitdie Option "Ein" aus.

    Screenshot des Azure-Portalbereichs zum Aktivieren der Laufzeitskalierung.

Wiederholungsunterstützung

Startwiederholungen

Wenn während des Starts eine Ausnahme auftritt, versucht die Hostlaufzeit automatisch, den Triggerlistener mit einer exponentiellen Backoffstrategie neu zu starten. Diese Wiederholungen werden fortgesetzt, bis entweder der Listener erfolgreich gestartet oder der Start abgebrochen wurde.

Wiederholungen bei Funktionsausnahmen

Wenn während der Änderungsverarbeitung eine Ausnahme in der Benutzerfunktion auftritt, wird der aktuell verarbeitete Zeilenbatch in 60 Sekunden erneut wiederholt. Andere Änderungen werden während dieser Zeit als normal verarbeitet, aber die Zeilen im Batch, die die Ausnahme verursacht haben, werden ignoriert, bis der Timeoutzeitraum verstrichen ist.

Wenn die Funktionsausführung fünf aufeinanderfolgende Male für eine bestimmte Zeile fehlschlägt, wird diese Zeile für alle zukünftigen Änderungen ignoriert. Da die Zeilen in einem Batch nicht deterministisch sind, können Zeilen in einem fehlgeschlagenen Batch in verschiedenen Batches in nachfolgenden Aufrufen enden. Dieses Verhalten bedeutet, dass nicht alle Zeilen im fehlgeschlagenen Batch unbedingt ignoriert werden. Wenn andere Zeilen im Batch die Ausnahme verursacht haben, werden die "guten" Zeilen möglicherweise in einem anderen Batch angezeigt, der in zukünftigen Aufrufen nicht fehlschlägt.