Bon je continue avec beanstalked. J'avais lu brievement ce que c'était, et j'avais pas bien compris qu'il s'agissait d'une messaging queue. Je m'attendais à ce qu'il soit possible que beanstalk lance lui même du code; ce qui change pas grand chose à vrai dire, juste les flèches de mon schéma d'origine ;)
J'ai donc téléchargé la version 1.3, installé libevent avec macports, j'ai cherché un peu pour trouver les headers de cette lib et voila pour le compiler :
* ./configure --with-event=/opt/local/var/macports/software/libevent/1.4.9_0/opt/local * make * sudo make install
magnifique, encore un soft sans encombres qu'on peut lancer comme ceci :
* beanstalkd -p 60606
Pour le client php j'ai pris celui de sourceforge, il a l'air plus a jour ... faudrait tester les deux !
Pour compatibilité avec le ZendFramework j'ai renommé le fichier en Lib/BeanStalk.php et la classe en Lib_BeanStalk ainsi que ligne 132 le new dans la function open, et toutes les occurences de BeanStalk::. J'aurai pu la laisser comme ça mais j'aime bien que tout soit rangé ;) je me suis retenu de splitter leur fichier en plusieurs classes nommée comme il faut... le but n'étant pas la, j'ai laissé comme ça !
Mais à mon avis il faudrait un peu patcher leur lib... Si on ne register qu'un serveur et qu'il est down ça part dans des boucles infinies qui plombent apache, pareil si on a plus de jobs et qu'on fait un reserve sans timeout.
Bref voici un fichier d'exemple pour utiliser beanstalkd :
<?php
set_include_path('/Users/lez/Workspaces/www/ZendFramework/ZendFramework-1.8.0/library' . PATH_SEPARATOR . get_include_path());
ini_set('display_errors', true);
ini_set('error_reporting', E_ALL);
require_once('Zend/Loader/AutoLoader.php');
Zend_Loader_AutoLoader::getInstance()
->registerNamespace('Lib');
$bs = Lib_BeanStalk::open(array('servers' => array('127.0.0.1:60606')));
# priority, delay, ttr, job
$bs->put(5, 0, 1, 'Hello');
$j = $bs->reserve_with_timeout(1);
if ($j) {
var_dump($j);
var_dump($j->get());
$j->delete();
} else {
echo "No process inqueue";
}
?>
Pour garder une certaine cohérence avec ce que je fais déja sur Jamendo et pour que ça soit plus fun, je vais aussi et majoritairement utiliser python pour le backend. J'utiliserai donc la version simpliste du client python, encore une fois il faudrait tester les 2.
* git clone git://github.com/earl/beanstalkc.git && mv beanstalkc/beanstalkc.py .
et on a la lib, voila un fichier d'exemple :
#!/usr/bin/python
import beanstalkc
bs = beanstalkc.Connection(host='127.0.0.1', port=60606, decode_yaml=False)
bs.put('Hello')
j = bs.reserve(timeout=1)
if j is not None:
print j.body
j.delete()
else:
print "No jobs inqueue"
Très simple, et j'ai testé, il ne part pas dans des boucles infinies pour les deux cas cités avant ;) peut être que pour le reserve sans timeout si, mais il ne plombe pas la machine au moins !
Je pensais aller plus loin cette fois ci mais je continuerai ce soir avec mysql.
[




