J'ai fait des recherches et ça servait à envoyer des messages entre 2 systèmes.
Mais pourquoi ? Pourquoi n'utiliseriez-vous pas simplement un Database
?
Il doit y avoir une fonction qui ActiveMQ
a que Databases
ne le font pas ?
Réponses
Trop de publicités?Je voudrais insister sur les points suivants :
Découplé : Les systèmes sont capables de communiquer sans être connectés. La file d'attente se trouve entre les systèmes, la défaillance d'un système n'affectera jamais les autres car la communication se fait par la file d'attente. Les systèmes continuent à fonctionner lorsqu'ils sont en panne.
Soutien au rétablissement : Les messages dans les files d'attente sont eux-mêmes persistants. Les messages peuvent être restaurés ultérieurement si la file d'attente échoue.
Une communication fiable : Considérons un système qui traite les demandes des clients. En temps normal, le système reçoit 100 demandes par minute. Ce système n'est pas fiable lorsque le nombre de demandes dépasse la moyenne. Dans ce cas, la file d'attente peut gérer les demandes et pousser des messages périodiquement en fonction du débit du système sans le casser.
Asynchrone : La communication client-serveur est non-bloquante. Une fois que le client a envoyé une demande au serveur, il peut effectuer d'autres opérations sans attendre la réponse. Lorsque la réponse est reçue, le client peut la traiter à tout moment.
Supposons que vous ayez une application qui soit utilisée sur plusieurs sites en même temps. Supposons également que votre application doive gérer des milliers de requêtes par minute ou quelque chose comme ça, les opérations de base de données normales ne peuvent pas gérer de telles opérations. Activemq agit comme le traitement des messages, il prend tous les messages dans la file d'attente, donc même si l'une de vos applications tombe en panne à un endroit, l'autre endroit ne sera pas affecté.
Considérons le scénario d'utilisateur générique suivant
SCÉNARIO DE L'UTILISATEUR
- Le client télécharge un document texte
- Votre application convertit le document de texte en PDF
- Votre application renvoie le PDF par courrier électronique à l client
Base de données pour un système basé sur les files d'attente Dans ce genre de circonstances, vous pouvez envisager d'utiliser une base de données pour votre ligne de travail PDF. Régulièrement, vous créez une table de base de données qui comprend une ligne avec des enregistrements relatifs aux demandes de PDF. Vous placerez ensuite une ligne dans la table indiquant dans quel état se trouve la mission et si elle est terminée ou non.
INSERT INTO pdf_job_queue (name, status, email) VALUES ("White paper", "NEW", "myemail@example.com");
SELECT * FROM pdf_job_queue WHERE queue = 'resize_queue' AND handled = false ORDER BY date_recived limit 1;
Vous devez écrire du code pour insérer les nouvelles demandes dans la base de données. Le code qui prend une entrée de la base de données, change peut-être une colonne d'état, avec des valeurs telles que " NEW
" et " PROCESSING
"Le code qui traite la requête, le code qui met à nouveau à jour le champ d'état de la base de données avec " FINISHED
", et plus de code pour supprimer la demande de la file d'attente.
update pdf_job_queue set Status="FINISHED" where Id = 'SomeId';
Pour fonctionner efficacement, vous devrez peut-être interroger la base de données rapidement et fréquemment. Bien entendu, cela ajoute une charge importante à la base de données et à votre application.
Files d'attente de messages Lorsque vous essayez de réaliser la même chose en utilisant des files d'attente de messages.
POUSSÉ EN TEMPS RÉEL Les messages d'une ligne de messages sont poussés en temps réel plutôt que d'être relevés occasionnellement à partir d'une base de données. Un volume beaucoup plus important de messages simultanés peut être maintenu de manière efficace en utilisant une ligne de messages. Les messages d'une ligne de messages sont naturellement nettoyés après avoir été reçus.
ACCUSÉ DE RÉCEPTION Un accusé de réception est renvoyé par le travailleur pour indiquer à la file d'attente des messages qu'un message particulier a été reçu et traité et que la file d'attente des messages est libre de le supprimer. Si un travailleur meurt sans avoir envoyé d'accusé de réception, la file d'attente des messages comprendra qu'un message n'a pas été entièrement traité et le redonnera à la file d'attente et à un autre travailleur. De cette façon, vous pouvez être sûr qu'aucun message n'est perdu.
Pour les systèmes de file d'attente de messages, je recommande toujours ActiveMQ en raison de sa facilité d'installation, de configuration et de mise à l'échelle.
- Réponses précédentes
- Plus de réponses