beanstalkd première approche

Publié par fredix Lun 05 mai 2008 21:27:00 GMT

beanstalkd est un serveur de file d’attente en C développé pour une application Facebook. Il existe un client Ruby mais la documentation est très succincte. Il existe bien un exemple d’usage mais ne répond pas vraiment aux questions, telles que comment obtenir un équivalent des namespaces de manière à ce que plusieurs clients puissent se connecter au serveur tout en écoutant chacun sur leur(s) file(s) et comment savoir que tel message vient de telle file. La documentation du protocole m’a permis d’y répondre.

beanstalk = Beanstalk::Pool.new(['localhost:11300'])
loop do
  job = beanstalk.reserve
  puts job.body # prints "hello" 
  job.delete
end

Le protocole de Beanstalkd parle de tube. Ces tubes correspondent à des files d’attentes. Dans cet exemple de base le client écoute par défaut sur le tube “default”. Si l’on souhaite spécifier le tube à écouter ou bien ajouter un tube il suffit de le préciser :

beanstalk.watch('montube')

Ainsi le client écoutera sur les tubes “default” et “montube”.

beanstalk.ignore('default')

Supprime l’écoute sur le tube “default”. Attention un client doit au moins écouter un tube. L’ignore doit donc être effectué après le watch.

Si l’on souhaite qu’un client puisse écouter sur plusieurs tubes, il y a de fortes chances d’avoir besoin de savoir de quel tube provient un message afin d’effectuer les bons traitements :

job.stats['tube']

Indique de quel tube provient le message reçu. Un exemple complet :

require 'rubygems'
require 'beanstalk-client'
beanstalk = Beanstalk::Pool.new(['127.0.0.1:11300'])
beanstalk.watch('foo')
beanstalk.watch('bar')
beanstalk.ignore('default')
loop do
  job = beanstalk.reserve
  job_hash = job.ybody
  case job.stats['tube']
  when "foo" 
    puts "from foo's tube : #{job_hash[:data]}" 
  when "bar" 
    puts "from bar's tube : #{job_hash[:data]}" 
  end
  job.delete 
end

Depuis un client qui souhaite empiler un message il suffit de préciser quel tube l’on vise, sinon cela sera “default” :

beanstalk.use('foo')

Exemple :

require 'rubygems'
require 'beanstalk-client'
beanstalk = Beanstalk::Pool.new(['127.0.0.1:11300'])
beanstalk.use('foo')
beanstalk.yput(:data => "good")
beanstalk.use('bar')
beanstalk.yput(:data => "bye")

Résultats :

from foo's tube : good
from bar's tube : bye

On a ainsi un usage plus intéressant que les exemples n’utilisant qu’un seul client sur un seul tube. Beanstalkd possède un grand nombre de commandes mais il est dommage qu’il ne fournisse pas pour l’instant d’option de persistance sur le disque. Pour cela sparrow peut faire l’affaire et même s’il est en Ruby, l’usage d’eventmachine peut sans doute lui faire tenir une charge raisonnable. Cependant Beanstalkd possède une communauté très active et des bibliothèques vers 4 langages (pas PHP :P mais cela ne saurait tarder).

Ruby & GTK : article dans LinuxMag

Publié par fredix Mar 18 mars 2008 13:03:00 GMT

LinuxMag vient de publier sur UnixGarden mon article sur ruby/GTK+ paru dans LinuxMag 99 : Ruby & GTK+ : le développement d’applications de bureau à votre portée.

Je le compléterai, notamment la partie sur GStreamer, quand j’aurais un peu de temps.

De la répartition de charge en Ruby on Rails

Publié par fredix Mar 22 jan 2008 15:32:00 GMT

Je viens de publier un article en 2 parties sur le blog d’AF83 :

De la répartition de charge en Ruby on Rails 1/2

De la répartition de charge en Ruby on Rails 2/2

C’est plutôt technique, et présente une solution parmis tant d’autres dans ce domaine très particulier.

Typo 4.1 2

Publié par fredix Dim 11 mars 2007 10:08:00 GMT

Je viens de mettre à jour Typo, Frédéric de Villamil vient de publier le gem qui va bien. Je tiens d’ailleurs à le remercier pour son aide, car un bug dans les scripts de migration depuis une version 4.0.3 empêchait la fin de celle-ci.
Je vous conseille donc d’attendre la version 4.1.1 si vous utilisez typo, ou bien commentez ces 2 lignes dans le script 056_create_notifications.rb :
# rename_table :notifications, :old_notifications
# drop_table :notifications

A savoir qu’en autre nouveauté, Typo gère maintenant la génération des flux RSS par tag. Très intéressant si vous ne voulez suivre qu’un seul genre de billet, ou si l’auteur ne souhaite syndiquer qu’un seul type de billet vers un planète. Exemple pour le tag Ruby :

http://fredix.freemonk.org/xml/rss/tag/ruby/feed.xml

Grand merci à Frédéric qui a repris seul typo !

un logo pour JabberFR

Publié par fredix Mar 30 jan 2007 21:31:00 GMT

JabberFR lance un appel à voter pour son nouveau logo. N’hésitez pas à envoyer votre petit message.

Par la même occasion, Omega vient de publier son service de présence Jabber en Ruby : presence. De quoi remplacer le moisi edgar en PHP.

Ruby sur usenet

Publié par fredix Lun 11 sept 2006 20:33:00 GMT

Enfin, suite à la réussite du vote pour la création de fr.comp.lang.ruby, celui-ci est enfin créé sur Usenet : http://groups.google.fr/group/fr.comp.lang.ruby

Foncez sur votre client de news group préféré (pan, thunderbird, knode, ...) pour retrouver cette nouvelle communauté qui commence fort ! Et oui déjà des questions sur FXRuby. Encore une preuve, s’il le fallait, que le développement de logiciel pour le desktop intéresse beaucoup de monde, et c’est tant mieux :)

ps : mon feed RSS n’est plus à jour, désolé pour les 3 personnes qui lisent ce blog :) J’essayerais de résoudre le problème quand j’aurais le temps.

Ruby-lang nouvelle charte et forum usenet-fr

Publié par fredix Lun 28 août 2006 20:41:00 GMT

Qu’il est beau notre nouveau site officiel : Ruby-lang, vivement la mise en ligne.

Pour info, comme annoncé sur fufa la création du forum fr.comp.lang.ruby a été couronné de succés. Merci à tout ceux qui se sont mobilisé et surtout au courageux initiateur.
La création du forum devrait être effective très rapidement.

Pour ceux qui comme moi n’ont pas accès un service usenet digne de ce nom de la part de leur FAI, je vous suggère l’utilisation de l’excellent serveur gratuit lacave.

Livre de cuisine

Publié par fredix Jeu 03 août 2006 19:57:00 GMT

Pour faire votre cuisine à toutes les sauces, le Ruby Cookbook vient de sortir. Pas loin de 1000 pages ! :)

Mais mon petit doigt me dit qu’une version en français devrait sortir cet automne. Ruby c’est bon mangez-en.