Bardziej akceptowaną metodą jest utrzymanie konsumenta w ruchu. Są narzędzia takie jak Supervisor i Circus, które mogą ci w tym pomóc. Zobacz this discussion. Ale jeśli możesz zmusić konsumenta do wyjścia, gdy nie ma już żadnych wiadomości, możesz również użyć crona. Chociaż może to spowodować opóźnienie w korzystaniu z wiadomości. Nie można natychmiast reagować na wiadomości. Użytkownicy mogą poczekać minutę, zanim jakiekolwiek zadanie zostanie uruchomione/poczta zostanie odebrana.
Proszę wziąć pod uwagę następujące czynniki przy prowadzeniu Konsumentów (lub dowolny kod PHP dla tej sprawy) przez długi czas:
Staraj się unikać Wykorzystanie pamięci akumulacji. Nie dołączaj do tablic bez ich usuwania. Oznacza to na przykład, że nie powinieneś używać FingersCrossedHandler w Monologu, ponieważ zachowuje to bufor wiadomości dziennika. W porządku dla pojedynczego żądania, a nie dla dni z wiadomościami debugowania.
Nawet jeśli zachowasz ostrożność, PHP może spowodować nieszczelność pamięci. Co możesz powiedzieć, PHP ... (To może być naprawdę chwytliwe hasło) W mojej sytuacji mam zainstalowany cronjob, który co wieczór uruchamia pracowników, ale teoretycznie konsumenci mogą działać około miesiąca, zanim zabraknie im pamięci.
Notatka boczna -m 50 nie jest niezawodna przez cały czas. Na przykład, jeśli masz kilka metod, które od czasu do czasu pojawiają się w kolejce, będziesz mieć problemy z utraconymi połączeniami. Dzieje się tak z powodu długiego okresu bezczynności. Lepiej ograniczyć rzeczywisty czas działania polecenia. Limit czasu połączenia może być związany z tym limitem. Konsument pracuje przez 1 godzinę i wychodzi, aby czas oczekiwania mógł wynosić 1 godzinę i 20 minut. To jest coś, czego brakuje pakietowi rabbitmq, ale jest on dostępny w pakiecie enqueue (--limit-time = "teraz + 1 godzina"). –