Quand dois-je utiliser des bibliothèques de messages comme ZeroMQ / RabbitMQ / ActiveMQ

Je fais un petit projet qui contient des clients et un serveur (qui gère les clients via un réacteur)

Je me demande si je dois utiliser une bibliothèque de fournisseurs de messages pour les faire interagir? ou juste des sockets simples suffiront?

Alors, dans quels scénarios devrais-je utiliser ces bibliothèques?

une)
Lorsqu’un modèle de communication formel plus abstrait (pouvant même être composite) doit être implémenté au-dessus des moyens de transport point à point bruts et qu’une mise à l’échelle et une composition faciles sont nécessaires ou attendues ultérieurement.
{ XREQ/XREP | PUSH/PULL | PAIR/PAIR | PUB/SUB }

b)
Lorsque plusieurs classes de transport sont bénéfiques pour vos objectives de performance, utilisez
{ tcp:// | ipc:// | inproc:// | epgm:// }

c)
Quand on ne veut pas avoir les mains sales sur les performances du traitement IO et que l’on a la possibilité de laisser ces problèmes opérés et mis à l’échelle par des threads IO dédiés au-delà de son propre travail ensemble de threads optimisé au niveau de la performance à l’intérieur du Context() central Context() et l’équipe de programmation apprécie simplement le confort de l’utilisation des méthodes de messagerie publiées, sans avoir à passer du temps sur des connaissances spécifiques à un domaine, nécessaires à l’application en cours de développement .

Tout le temps!

Quelques choses à garder à l’esprit:

1). RabbitMQ a besoin d’un serveur central, contrairement à ZeroMQ.
2). RabbitMQ est un proactor, ZeroMQ est un réacteur. Ce dernier est IMHO beaucoup plus facile à coder.

Considérons également nanomsg. Il est similaire à ZeroMQ, mais sa conception est plus propre, ce qui facilite l’ajout de motifs supplémentaires (et ils le sont également).

Des choses comme RabbitMQ, ZeroMQ et nanomsg ne sont que des octets. Pour les rendre utiles, il est judicieux de sérialiser les messages. Si votre système est une langue unique (par exemple, C #), il n’y a rien de mal à utiliser les fonctions de sérialisation intégrées à cette langue. Cependant, vous pouvez également envisager quelque chose comme Google Protocol Buffers, ou XSD / XML, ou ASN.1, Avro. Ce sont tous des sérialiseurs indépendants du langage, vous permettant de développer un système hétérogène dissortingbué. JSON est attrayant dans certains sens (tout le monde l’utilise), bien que de ce que j’ai vu des outils pour transformer des schémas JSON en code, ils sont loin d’être matures.