API-Drosselung
Mirakl-Marktplätze schützen ihre APIs durch Aufrufgrenzen (Rate Limits). Wenn Sie in kurzer Zeit zu viele Aufrufe absetzen, antwortet der Marktplatz mit einer Rate-Limit-Meldung und bittet darum zu warten. Das Plugin behandelt das auf zwei Wegen: Es verteilt seine eigenen ausgehenden Aufrufe für die drei großen Importflüsse zeitlich, und es zieht sich zurück und wiederholt, wenn der Marktplatz darum bittet.
Sie müssen nichts tun, damit das funktioniert — es geschieht automatisch. Diese Seite erklärt, was im Hintergrund passiert, damit Sie es in den Sync Logs erkennen, wenn eine Synchronisation ungewöhnlich langsam erscheint.
Was das Plugin selbst zeitlich verteilt
Abschnitt betitelt „Was das Plugin selbst zeitlich verteilt“Das Plugin erzwingt eine Minute Abstand zwischen seinen eigenen Aufrufen in drei Importflüssen, je Marktplatz:
- Produktimporte — die Aufrufe, die Produkte in den Marktplatzkatalog hochladen.
- Angebotsimporte — die Aufrufe, die Angebote (Preis und Bestand für ein gegebenes Produkt) hochladen.
- Bestandsimporte — die Aufrufe, die ausschließlich Bestandsaktualisierungen senden.
Diese drei Gruppen sind unabhängig voneinander. Eine Pause bei den Angebotsimporten blockiert die Bestandsimporte oder Produktimporte nicht.
Alles andere — Bestellimport, Nachrichten-, Dokument-, Rechnungs- und Transaktionsprotokoll-Synchronisation — verwendet diese Verteilung nicht. Diese Abläufe verlassen sich allein auf die Rate-Limit-Antwort des Marktplatzes (siehe unten).
Was während der Minutenpause passiert
Abschnitt betitelt „Was während der Minutenpause passiert“Wenn das Plugin einen der verteilten Aufrufe senden möchte und der vorherige Aufruf zur selben Gruppe weniger als 60 Sekunden zurückliegt, wird der Aufruf um 60 Sekunden verschoben. Das Plugin wartet nicht aktiv — es legt die Nachricht mit Verzögerung zurück in die Warteschlange, lässt den Hintergrundprozess andere Arbeit erledigen und nimmt die Nachricht später wieder auf.
Was Sie sehen werden:
- In den Sync Logs kann ein Lauf von Stock sync oder Product export, der normalerweise einige Minuten dauert, sich verlängern, während das Plugin seine Aufrufe verteilt.
- Der Zähler Processed steigt stetig, nur langsamer als die Wanduhr.
- Keine Charge wird verworfen — der eventuelle Abschluss ist garantiert.
Was passiert, wenn der Marktplatz „Rate Limit” sagt
Abschnitt betitelt „Was passiert, wenn der Marktplatz „Rate Limit” sagt“Wenn der Marktplatz selbst mit einer Rate-Limit-Antwort (HTTP-Status 429) antwortet, teilt er dem Plugin im Header Retry-After mit, wie lange es warten soll. Das Plugin hält sich daran: Es legt die Nachricht mit genau dieser Verzögerung zurück in die Warteschlange und lässt den Hintergrundprozess andere Arbeit erledigen.
Der Wiederholungspfad ist für jede Art von Synchronisation derselbe — sowohl für verteilte als auch für nicht verteilte Abläufe. Sie sehen eine Sync-Log-Zeile mit dem Rate-Limit-Text des Marktplatzes im Feld Message. Der nächste Versuch wird automatisch aufgenommen, sobald die Verzögerung abgelaufen ist.
Wie Sie erkennen, dass die Drosselung aktiv ist
Abschnitt betitelt „Wie Sie erkennen, dass die Drosselung aktiv ist“Das einfachste Signal steht in den Sync Logs:
- Ein Lauf von Stock sync, Product export batch oder Offer sync im Status
started, der merklich länger dauert als üblich, mit langsam steigendem Processed-Zähler — das ist das Plugin, das seine Aufrufe verteilt. - Eine Zeile auf Stufe
warningodererrormit einer Nachricht, die das Rate Limit des Marktplatzes erwähnt — das ist der Marktplatz, der zurückdrückt. Der nächste Versuch läuft automatisch nach der zurückgegebenen Verzögerung.
Wenn Sie ständige Rate-Limit-Meldungen für Abläufe sehen, die nicht verteilt werden (Bestellimport, Nachrichten-, Dokument-, Rechnungs-, Transaktionsprotokoll-Synchronisation), besteht die Lösung darin, das entsprechende Intervall auf dem Reiter Mirakl → Einstellungen → Synchronisierungseinstellungen zu reduzieren — siehe Einstellungen.
Mehrere Hosts mit Hintergrundprozessen
Abschnitt betitelt „Mehrere Hosts mit Hintergrundprozessen“Wenn Sie mehrere Shopware-Hosts mit Hintergrundprozessen betreiben, die denselben Marktplatz ansprechen, verteilt jeder Host seine Aufrufe standardmäßig unabhängig — sie wissen nichts von den Aufrufen der anderen. Für eine kleine Flotte ist das in der Regel ausreichend, weil das Rate Limit des Marktplatzes Überschreitungen ohnehin abfängt. Für größere Aufstellungen konfigurieren Sie einen gemeinsamen Lock-Store (Redis oder Doctrine) für Symfony Lock, damit die Hosts sich abstimmen.
Tipps und Fallstricke
Abschnitt betitelt „Tipps und Fallstricke“Verwandte Themen
Abschnitt betitelt „Verwandte Themen“- Synchronisationsprotokolle — wo Rate-Limit-Meldungen auftauchen
- Hintergrundaufgaben — die geplanten Aufgaben, die diese Aufrufe senden
- Einstellungen — die Sync-Intervalleinstellungen, die Sie bei Rate-Limit-Meldungen reduzieren können
- Fehlerbehebung — breitere Checkliste, wenn etwas hängt