Wpis z mikrobloga

Symfony Messenger i klasy Transportów

https://gildia-developerow.pl/symfony-messenger-i-klasy-transportow/ ( ͡º ͜ʖ͡º)

Symfony Messenger jest świetny. Zgodzicie się? Instalujecie jedną paczkę i możecie wysłać wiadomość na kolejkę… oh wait. No jednak nie. Chociaż nie jest to tak trywialne jak w Doctrine, to jest to dosyć proste, o czym będzie dzisiejszy post.

Tagi: #programowanie, #naukaprogramowania i #programista15k w #php, #symfony, #technologia
CppPolska - Symfony Messenger i klasy Transportów

https://gildia-developerow.pl/symf...

źródło: rodrigo-abreu-lq9PxpwDZUk-unsplash-2048x1358

Pobierz
  • 5
@CppPolska: masz coś na temat Lock Component?

Case taki, że występuje użycie Messenger, gdzie kilka procesów asynchronicznie, równolegle wykonuje jakieś działania w bazie danych, powiedzmy z użyciem Doctrine, czy warto korzystać z Lock, aby te procesy się nie "pogryzły", nie było sytuacji "wyścigu"?
@Serghio: Ja korzystam. W moim przypadku się sprawdza. Aplikacja ma policzyć "flagi" dla części zamówień, żeby osoba pracująca z zamówieniami wiedziała od razu, gdzie są jakieś błędy w zamówieniu czy coś takiego. Z powodu dwóch konsumerów - występowała sytuacja wyścigu. Lock rozwiązał ten problem.
@mariecziek: i blokujesz samą encję zamówienia, czy całą grupę? Nadając lockowi id, np. "order_12", gdzie 12 to jego ID?

A przy drugim consumerze, gdy chce edytować tą samą encję, co robisz, gdy jest założony lock? Czekasz na zwolnienie z jakimś limitem, czy rzucasz wyjątek?
@Serghio: Tak, właśnie tak robię jak piszesz. Korzystam z Flock Store do przechowywania id.

Aktualnie rozwiązanie mam takie, że daję sleep na pół sekundy (i powtarzam to 3 razy) xD W ideale to musiałbym odrzucić wiadomość z nagłówkiem opóźniającym kolejna próbę obsługi, ale brakuje mi wiedzy, żeby robić takie skomplikowane rzeczy, więc obecnie sleep musi wystarczyć.
@Serghio: Czekam 500ms, ponawiam próbę i tak 3x, potem event zostaje odrzucony tak jak przy wystąpieniu wyjątku. Oczywiście loguję to zdarzenie, żebym w razie czego, mógł coś zrobić "ręcznie". No ale jako, że wiadomość zostaje odrzucona, to zgodnie z ustawieniami aplikacji, event wraca do kolejki jakby został normalnie odrzucony (bo np. wystąpił wyjątek) i próba jest ponawiana, ponieważ standardowo w razie błędu - event dostaje ospowiednie nagłówki i obsługa jego jest