Au travail, nous devons créer un serveur de tâches pour des choses comme l'envoi d'e-mails, la création de PDF, la compression de données, etc. Évidemment, nous aimerions construire sur une sorte de système de file d'attente générique. Je connais Gearman et c'est exactement ce problème qu'il essaie de résoudre: mettre les emplois dans une file d'attente où les travailleurs viennent les chercher. Cependant, je vois beaucoup de mentions sur Rabbitmq et je ne sais pas comment il est utilisé dans ce scénario.
Rabbitmq est-il un bon cadre pour construire un système d'emplois distribués par-dessus?
Je dirais que Gearman est meilleur pour la mise en file d'attente des "travaux" et RabbitMQ est meilleur pour la mise en file d'attente des "données". Bien sûr, ils sont tous les deux la même chose, mais la façon dont cela fonctionne pour moi est que si vous essayez de "déployer" le travail à faire et que les travailleurs peuvent travailler de manière indépendante, Gearman est la meilleure façon de le faire . Mais si vous essayez de transférer des données provenant de nombreuses sources vers moins de consommateurs de données, RabbitMQ est la meilleure solution.
L'histoire de RabbitMQ, comme quelque chose qui a permis à Twitter de prendre des tonnes de messages et de les alimenter dans de vieilles passerelles croustillantes SMS qui ne pouvaient garder qu'une seule connexion ouverte, étaient à débit limité et n'avaient pas de nouvelles tentatives) , illustre le type de problèmes que RabbitMQ est capable de résoudre.
Tout dépend de la sémantique que vous souhaitez exposer. Il est vraiment facile de faire ce que Gearman fait en plus de RabbitMQ, ce qui peut certainement `` étendre '' les messages aux travailleurs indépendants.
Mais Gearman est conçu à cet effet. IIUC, Gearman est un framework pour le traitement des jobs et non un système de messagerie en tant que tel. Il existe d'autres frameworks tels que Celery qui utilisent RabbitMQ sous le capot pour cela. Voici un article sur le céleri qui vaut la peine d'être lu.