Il metodo più accettato è quello di mantenere il vostro utente in esecuzione. Ci sono strumenti come Supervisor e Circus che possono aiutarti in questo. Vedi this discussion. Ma se riesci a far uscire il tuo consumatore quando non ci sono più messaggi, puoi usare anche cron. Sebbene ciò potrebbe causare un ritardo nel consumo dei messaggi. Non puoi reagire immediatamente ai messaggi. Gli utenti potrebbero dover attendere un minuto prima che venga avviata qualsiasi attività o che la posta sia ricevuta.
Si prega di prendere in considerazione quanto segue quando si esegue il vostro consumatore (o qualsiasi codice PHP per questo) per un lungo periodo:
cercare di evitare l'accumulo di utilizzo della memoria. Non continuare ad accodare gli array senza mai cancellarli. Ciò significa ad esempio che non si dovrebbe usare FingersCrossedHandler in Monolog poiché mantiene un buffer di messaggi di registro. Va bene per una singola richiesta, non per un dayworth dei messaggi di debug.
Anche quando si presta attenzione, PHP potrebbe perdere memoria. Cosa puoi dire, PHP ... (Questo potrebbe essere davvero uno slogan) Nella mia situazione ho un cronjob installato che riavvia i lavoratori ogni notte, ma in teoria i consumatori potrebbero correre circa un mese prima che finiscano la memoria.
Una nota a margine -m 50 non è affidabile tutto il tempo. Ad esempio, se hai qualche metodo in coda di tanto in tanto, avrai problemi con le connessioni perse. Succede a causa di un lungo periodo di inattività. Meglio limitare il tempo effettivo in cui il comando funziona. Il timeout di tutte le connessioni potrebbe essere limitato a questo limite. Il consumatore lavora per 1 ora ed esce quindi il timeout può essere impostato su 1 ora e 20 minuti. Questo è qualcosa che manca a bundle di rabbitmq ma è disponibile in enqueue bundle (opzione --limit-time = "now + 1 hour"). –