MWS OrderSearch Step API Limitierung und Throttling - gibt es einen Trick?

Hallo,

vielen Dank für das zusätzliche Prime Feld! Ich wollte den Flow heute nun live schalten. Außerhalb der Sandbox laufe ich allerdings ständig ins API Limit, selbst wenn ich nur die unverschickten Aufträge der letzten paar Stunden abrufe.


ERROR:Webservice Error: Request is throttled(requestId: 957b4d6f-0674-418b-a657-5580185467a3responseContext: [MHM1wM1P4upAMpPeq9/F9wUbhWoB2wchGxwv2qNMbMjKWg/YJRLFfTuO1dFICkZN14KEDs7YFHg=]timestamp: 2018-12-06T16:55:19.467ZquotaMax: nullquotaRemaining: nullquotaResetsAt: null)

17:55:19Finished GetOrders: numOrderCalls:1 numOrderItemsCalls:44


Laut Eventlog wird 1 numOrderCall durchgeführt und 44 numOrderItemsCalls.

In der Amazon Doku steht hierzu:


Throttling

The ListOrders and ListOrdersByNextToken operations together share a maximum request quota of six and a restore rate of one request every minute.

Throttling

The ListOrderItems and ListOrderItemsByNextToken operations together share a maximum request quota of 30 and a restore rate of one request every two seconds. For definitions of throttling terminology, see Orders API.


Ich nehme mal an, dass es an der Beschränkung nur 30 Artikel liegt. Gibt es irgendeinen Trick, wie ich das Limit umgehen kann. Kann man die einzelnen API Calls "strecken" ? Was ist eure Empfehlung?

Der Flow soll werktags stündlich von 9-16 Uhr laufen. Dabei sollen nur Bestellungen abgerufen werden, die seit dem letzten Flowrun erzeugt wurden. Besonders über Nacht und über das Wochenende werden aber trotzdem einige Bestellungen zusammenkommen, die das Limit nicht abdeckt. :(

Viele Grüße
Diana

Wir schauen uns das Thema an.

Hallo Synesty Team,

vielen Dank. Mir würde auch schon ein Tipp zur Best-Practise reichen. Ich kann die Aufträge auch per Report abholen, ggf. sogar in einen Datastore zwischenspeichern (damit dann verschiedene Flows darauf zugreifen können), und anschließend nur bestimmte Datensätze aus dem Datastore verarbeiten.

Evtl. ist das ja die geschicktere Variante.


Wartet der MWSRequestReport Step denn immer ab, bis der Bericht vollständig erzeugt ist?

Es wird gerade das RateLimiting verbessert, damit das Limit besser berücksichtigt.
Den MWSRequestReport Step kannst du auch probieren. Der ist aber anders von der Struktur.

Super, vielen Dank. Wie genau sieht die Verbesserung aus? Werden die Calls einfach mehr in die Länge gestreckt?


Den MWSRequestReport habe ich auch schon probiert bzw. damit gebastelt. Hierfür benötige ich nur einen zusätzlichen Datastore, damit die Bestellungen nicht doppelt verarbeitet werden. Das wäre mit dem MWSOrderSearch Step nicht notwendig, wenn man die Zeit des letzten Flowruns einbezieht. Aber dafür habe ich aktuell mit den Reports keine Limitprobleme. Das ist auch viel wert ;)

Der MWSSearchOrder Step gibt zwar eine Warnung beim Überschreiten der Limits holt aber die Aufträge bis zum Erreichen des Limits trotzdem ab und gibt diese als Output weiter. Man kann also durch ein Setzen der Import Limits auf z.B 30 Orders und mehrfaches ausführen des Flows in kürzeren Abständen ganz gut trotz des Throttlings von Amazon arbeiten. So ist jedenfalls unsere Erfahrung.
Viele Grüße

Tobias

Wir haben ebenfalls dieses Problem, daher möchte ich dieses Thema nochmals öffnen.


In einem Flow rufen wir die Aufträge der verschiedenen Amazon-Marktplätze nacheinander ab und speichern diese in einem Datastore. Unser Abruflimit steht auf dabei jeweils auf 100.


Nachdem von Amazon Deutschland 23 Aufträge und von Amazon Frankreich 9 Aufträge abgerufen wurden, läuft der Flow bei Amazon Italien auf folgenden Fehler:

(Root Causes: MarketplaceWebServiceOrdersException: Request is throttled MwsException: Request is throttled)

Dort hätten 3 Aufträge abgerufen werden sollen.


Wie kann dieser Fehler umgangen werden?

Laut API-Richtlinie ist das Limit bei 600 Aufträgen. Dieses haben wir in unserem Fall nicht erreicht.

Wo genau ist das Problem?


Vielen Dank im Voraus

Thorsten

Hallo Thorsten,


das Problem ist in deinem beschriebenen Fall sicher nicht das Order Limit, sondern das Limit für den Abruf der Order Items (http://docs.developer.amazonservices.com/en_US/orders-2013-09-01/Orders_ListOrderItems.html). Hier besteht ein Limit von 30 Requests und alle 2 Sekunden ist wird ein Request wieder "aufgefüllt". Bei den 32 Aufträgen (DE + FR) wurde mit sicherlich pro Auftrag ein ListOrderItems Request ausgeführt, was zur Überschreitung des Limits geführt hat.


Der MWSOrderSearch Step "kennt" das Limit von 30 und würde auch entsprechend beim erreichen des Limits die Anzahl der Requests pro Sekunde verringern. Das funktioniert aber leider nicht Step übergreifend. Da du mehrere MWSOrderSearch Steps in deinem Flow hast, gehen die einzelnen Steps von max. verfügbaren Limits aus (6 Order, 30 Order Item Requests) und führen die Request dann auch schnell nacheinander aus.


Eine Möglichkeit wäre die einzelnen Marktplätze etwas zeitversetzt in einzelnen Flows abzurufen. Alternativ könntest du auch probieren die Aufträge über den MWSRequestReport Step abzurufen.


Viele Grüße

Torsten