Przejdź do głównej zawartości

API throttling

Marketplace’y Mirakl chronią swoje API limitami zapytań. Jeśli wyślesz zbyt wiele wywołań w krótkim czasie, marketplace odpowie komunikatem „przekroczono limit zapytań” i poprosi o odczekanie. Plugin radzi sobie z tym na dwa sposoby: rozkłada w czasie swoje własne wywołania dla trzech głównych przepływów importowych oraz wycofuje się i ponawia próbę, gdy marketplace o to poprosi.

Nie musisz nic robić, żeby to działało — wszystko jest automatyczne. Ta strona wyjaśnia, co dzieje się w tle, żebyś rozpoznał sytuację w Sync Logs, gdy synchronizacja wydaje się wyjątkowo wolna.

Plugin pilnuje minutowej przerwy między swoimi własnymi wywołaniami dla trzech przepływów importowych, osobno dla każdego marketplace’u:

  • Product imports — wywołania, które wgrywają produkty do katalogu marketplace’u.
  • Offer imports — wywołania, które wgrywają oferty (cena i stan magazynowy dla danego produktu).
  • Stock imports — wywołania, które przesyłają wyłącznie aktualizacje stanów.

Te trzy grupy są niezależne. Pauza na ofertach nie blokuje stanów ani importu produktów.

Wszystko inne — import zamówień, synchronizacja wiadomości, dokumentów, faktur i dziennika transakcji — nie korzysta z tego rozkładania w czasie. Te przepływy polegają wyłącznie na odpowiedzi marketplace’u o limicie zapytań (zobacz niżej).

Gdy plugin chce wysłać jedno z rozkładanych wywołań, a poprzednie wywołanie do tej samej grupy zostało wysłane mniej niż 60 sekund temu, wywołanie jest odłożone o 60 sekund. Plugin nie stoi w miejscu — wkłada wiadomość z powrotem do kolejki z opóźnieniem, pozwala procesowi w tle robić co innego, i wraca do tej wiadomości później.

Co zobaczysz w praktyce:

  • W Sync Logs uruchomienie Stock sync albo Product export, które normalnie trwa kilka minut, może się wydłużyć, bo plugin rozkłada wywołania w czasie.
  • Licznik Processed stale rośnie, tylko wolniej niż zegar.
  • Żadna partia nie znika — końcowe wykonanie jest gwarantowane.

Co dzieje się, gdy marketplace mówi „przekroczono limit”

Dział zatytułowany „Co dzieje się, gdy marketplace mówi „przekroczono limit””

Jeśli sam marketplace odpowie komunikatem o limicie zapytań (status HTTP 429), informuje plugin, jak długo ma poczekać przez nagłówek Retry-After. Plugin stosuje się do tego: odkłada wiadomość do kolejki z dokładnie tym opóźnieniem, a w międzyczasie proces w tle robi co innego.

Ścieżka ponowienia jest taka sama dla każdego rodzaju synchronizacji — zarówno dla przepływów rozkładanych w czasie, jak i pozostałych. Zobaczysz wiersz w Sync Logs z komunikatem od marketplace’u w polu Message. Następna próba wykona się automatycznie, gdy opóźnienie minie.

Najprostszy sygnał jest w Sync Logs:

  • Uruchomienie Stock sync, Product export batch albo Offer sync w statusie Started trwające zauważalnie dłużej niż zwykle, z powoli rosnącym licznikiem Processed — to plugin rozkłada wywołania w czasie.
  • Wiersz na poziomie Warning lub Error z komunikatem wspominającym o limicie zapytań od marketplace’u — to marketplace się broni. Następna próba uruchomi się automatycznie po zwróconym opóźnieniu.

Jeśli widzisz stałe komunikaty o limicie zapytań na przepływach, które nie są rozkładane w czasie (import zamówień, synchronizacja wiadomości, dokumentów, faktur, dziennika transakcji), rozwiązaniem jest zmniejszenie odpowiedniego interwału na zakładce Mirakl → Settings → Sync Settings — zobacz Settings.

Jeśli masz kilka hostów Shopware z procesami w tle, które odpytują ten sam marketplace, każdy host domyślnie rozkłada wywołania w czasie sam dla siebie — nie wie o wywołaniach innych. Dla małej floty zwykle jest to wystarczające, bo limit po stronie marketplace’u i tak złapie ewentualne przekroczenie. Dla większych konfiguracji skonfiguruj wspólny lock store (Redis albo Doctrine) dla Symfony Lock, żeby hosty się ze sobą synchronizowały.

  • Sync logs — gdzie pojawiają się komunikaty o limitach
  • Background tasks — zaplanowane zadania, które wysyłają te wywołania
  • Settings — ustawienia interwałów synchronizacji, które możesz zmniejszyć przy komunikatach o limicie
  • Troubleshooting — szersza lista kontrolna, gdy coś utknęło