Wpis z mikrobloga

tak patrzę że wysyłanie emaili, tj powiadomień podczas requesta to trochę słaby pomysł bo trochę to spowalnia kontakt z użytkownikiem, chcę to ogarnąć na kolejce(zadania w tle) i tak zastanwiam się nad dwoma rozwiązaniami - skrypt działający w pętli czy może zadanie cron odpalane co minutę ?
#php #webdev
  • 18
@DiKey: @slave89: @paki81: mam o taki przypadek po prostu - dodaję coś do kolejki a mój skrypt sprawdza zadania w kolejce i wykonuje dla nich jakieś akcje, i właśnie interesuje mnie czy lepiej to wykonywać w pętli i jakiś sleep po prostu czy może jako zadanie cron czy jakiś rabbitmq jak wyżej czy moze beanstalkd mi wystarczy, prościej mówiąc chodzi mi o skrypt obsługujący tą kolejkę, czy trzymać go
@Jurigag: jak na małą skalę to kolejka w db i skrypt w cronie, który co minutę bierze zadania z kolejki i je wykonuje oznaczając które wykonał. Minuta opóźnienia w mailu jest do zniesienia. Jak planujesz coś większego no to najlepiej system kolejek, możesz wtedy mieć wiele workerów i nie martwisz się o locki. Jak już wejdziesz w system kolejek to więcej zadań które niepotrzebnie opóźniają response możesz wrzucić w kolejkę.
@slave89: we frameworku mam obsługę beanstalkd, wgranie jego to chwila - pytanie czy warto, no ale kolejka to swoją drogą a skrypt obsługujący tą kolejkę swoją drogą, chodzi mi o to czy skrypt obsługujący kolejkę powinien być w pętli czy jako cron ? :x
@Jurigag: W pętli jako cron :P Po pierwsze zastanów się, jakie masz dokładne wymagania, a potem które rozwiązanie je spełnia. Masz dwie możliwości: cron i daemon. W rozwiązaniu z cronem musisz dodatkowo zabezpieczać przed uruchomieniem nowego skryptu przed zakończeniem starego (u mnie do tej pory sprawdza się file lock). Rozwiązanie z procesem w tle uruchamiasz i zapominasz, możesz też uruchamiać jakimś menadżerem, np. supervisord. Proces w tle będzie wysyłał emaile od
jak niby SwiftMailer wspiera wysyłkę po wysłaniu odpowiedzi ?

No to odpowiedź masz w pseudokodzie:

send_response();
send_queued_emails()

znaczy i tak operuje na jsonach także wyświetlania żadnego nie ma :P


@Jurigag: Co ma do tego JSON? wysyłanie odpowiedzi z serwera działa zawsze tak samo.
@Jurigag: Nie bardzo rozumiem Twoje zachowanie. Staram Ci się pomóc, podzielić wiedzą i doświadczeniem, a Ty jak idiota przyczepiłeś się jednego słowa, które kompletnie nie ma wpływu na omawiany problem.
@stacktrace: no ależ bardzo dziękuje za poświęcony czas, ale nie wiem po co się tak spinasz jak to w pętli jako cron ? bo trochę nie rozumiem tego, to przecież będzie odpalało mi się wiele cronów i operować będzie na tej samej kolejce, nie będzie to wysyłało jakoś kilka razy przypadkiem ?
ale nie wiem po co się tak spinasz


@Jurigag: Nie spinam się, napisałem co sądzę o Twoim zachowaniu i jak widać podziałało.

Kiedy pisałem o pętli w cronie, miałem na myśli:
while(count($queue)) { $message = $queue->dequeue(); consume($message); }.
Jeżeli chodzi o uruchomienie wielu procesów za pomocą crona to jest sytuacja identyczna z uruchomieniem wielu procesów w tle. Nie będzie się wysyłało kilka razy, bo tak działa kolejka. Wiadomość pobrana raz