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.
Co plugin rozkłada w czasie
Dział zatytułowany „Co plugin rozkłada w czasie”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).
Co dzieje się podczas minutowej przerwy
Dział zatytułowany „Co dzieje się podczas minutowej przerwy”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.
Po czym poznać, że throttling jest aktywny
Dział zatytułowany „Po czym poznać, że throttling jest aktywny”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.
Wiele hostów z procesami w tle
Dział zatytułowany „Wiele hostów z procesami w tle”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.
Wskazówki i pułapki
Dział zatytułowany „Wskazówki i pułapki”Powiązane tematy
Dział zatytułowany „Powiązane tematy”- 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