Kdyby/rabbitMq čekání na zprávy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondrej256
Člen | 186
+
0
-

Zdravím,

mám consumera, který obsluhuje frontu. Consumer spouštím cronem v pravidelných intervalech a zpracovávám vždy po 5 zprávách z fronty.

php www/index.php rabbitmq:consumer myconsumer -m 5

Vypozoroval jsem však, že pokud je fronta prázdná a spustím consumera výše uvedeným příkazem, tak consumer, čeká až do fronty příjdou další zprávy ke zpracování a dokud jich nezpracuje 5 tak čeká a neukončí se.

Rád bych toto chování změnil, aby consumer nečekal až do fronty příjdou další zprávy a prostě se ukončil.

Jinak by se mohlo stát, že by cron tohoto consumera spustil třeba 10×.

Řešili jste někdo tento problém?

Myiyk
Člen | 321
+
+1
-

Ahoj,
proč ten proces nespustíš jako daemon, aby běžel pořád?

Tvé aktuální řešení má mezeru i pokud přijde hodně požadavků. Pokud přijde 1000 požadavků, bude trvat 200 spuštění cronu, než se zpracují.

Řešení tvého problému
A)
Můžeš si udělat skript, přes který se to bude spouštět. Ve skriptu je ošetřeno, aby se nespustil program vícekrát. viz http://www.cyberciti.biz/…service.html

B)
Pokud máš problém s pamětí při dlouhém běhu programu. Udělej si skript, který program spustí, když se ukončí.

Tohle by mohlo fungovat, netestoval jsem to

#!/bin/bash
while true;
do
	php www/index.php rabbitmq:consumer myconsumer -m 5;
	sleep 1; # sníží zátěž systému, když program bude padat při startu
done

V cronu nastav aby se skript spustil po startu systému.

Editoval Myiyk (24. 8. 2016 0:57)

looky
Člen | 99
+
+3
-

Na tohle je asi nejlepší řešení použít Supervisor. Spustíš přes něj consumera, ten si čeká na zprávy, a když je všechny odbaví a umře, tak ho Supervisor spustí znova.

Editoval looky (24. 8. 2016 13:58)