Lorsque vous utilisez un service Web, vous avez un client et un serveur:
- Si le serveur tombe en panne, le client doit prendre la responsabilité de gérer l'erreur.
- Lorsque le serveur fonctionne à nouveau, le client est responsable de le renvoyer.
- Si le serveur répond à l'appel et que le client échoue, l'opération est perdue.
- Vous n'êtes pas en désaccord, c'est-à-dire: si des millions de clients appellent un service Web sur un serveur en une seconde, votre serveur va probablement tomber en panne.
- Vous pouvez vous attendre à une réponse immédiate du serveur, mais vous pouvez également gérer les appels asynchrones.
Lorsque vous utilisez une file d'attente de messages comme RabbitMQ, Beanstalkd, ActiveMQ, IBM MQ Series, Tuxedo, vous vous attendez à des résultats différents et plus tolérants aux pannes:
- Si le serveur tombe en panne, la file d'attente conserve le message (éventuellement, même en cas d'arrêt de la machine).
- Lorsque le serveur fonctionne à nouveau, il reçoit le message en attente.
- Si le serveur donne une réponse à l'appel et que le client échoue, si le client n'a pas accusé réception de la réponse, le message est conservé.
- Vous avez un conflit, vous pouvez décider du nombre de demandes traitées par le serveur (appelez-le à la place).
- Vous ne vous attendez pas à une réponse synchrone immédiate, mais vous pouvez implémenter / simuler des appels synchrones.
Message Queues a beaucoup plus de fonctionnalités, mais il s'agit d'une règle générale pour décider si vous souhaitez gérer vous-même les conditions d'erreur ou les laisser dans la file d'attente des messages.
Il y a eu pas mal de recherches récentes sur la manière dont les appels HTTP REST pourraient remplacer le concept de file d'attente de messages.
Si vous introduisez le concept d'un processus et d'une tâche en tant que ressource, le besoin d'une couche de messagerie intermédiaire commence à s'évaporer.
Ex:
Une tâche peut avoir plusieurs étapes pour l'initialisation, et un processus peut retourner l'état lorsqu'il est interrogé ou POST vers une URL de rappel lorsqu'il est terminé.
C'est très simple et devient assez puissant lorsque vous réalisez que vous pouvez désormais vous abonner à un flux rss / atom de tous les processus et tâches en cours d'exécution sans aucune couche intermédiaire. Tout système de mise en file d'attente nécessitera de toute façon une sorte de frontal Web, et ce concept l'a intégré sans autre couche de code personnalisé.
Vos ressources existent jusqu'à ce que vous les supprimiez, ce qui signifie que vous pouvez afficher les informations historiques longtemps après la fin du processus et de la tâche.
Vous avez intégré la découverte de services, même pour une tâche comportant plusieurs étapes, sans protocoles supplémentaires compliqués.
Votre découverte de service est un formulaire HTML - un format universel et lisible par l'homme.
L'ensemble du flux peut être utilisé par programme ou par un humain, à l'aide d'outils universellement acceptés. C'est un client, et donc RESTful. Chaque outil créé pour le Web peut piloter vos processus métier. Vous disposez toujours de canaux de messages alternatifs en POSTANT de manière asynchrone sur un tableau distinct de serveurs de journaux.
Après y avoir réfléchi pendant un certain temps, vous vous asseyez et commencez à réaliser que REST peut simplement éliminer le besoin d'une file d'attente de messagerie et d'un ESB.
http://www.infoq.com/presentations/BPM-with-REST
la source
Les files d'attente de messages sont idéales pour les demandes dont le traitement peut prendre du temps. Les demandes sont mises en file d'attente et peuvent être traitées hors ligne sans bloquer le client. Si le client doit être informé de l'achèvement, vous pouvez lui fournir un moyen de vérifier périodiquement l'état de la demande.
Les files d'attente de messages vous permettent également de mieux évoluer dans le temps. Il améliore votre capacité à gérer des salves d'activité intense, car le traitement réel peut être réparti dans le temps.
Notez que les files d'attente de messages et les services Web sont des concepts orthogonaux, c'est-à-dire qu'ils ne s'excluent pas mutuellement. Par exemple, vous pouvez avoir un service Web basé sur XML qui sert d'interface à une file d'attente de messages. Je pense que la distinction que vous recherchez est Message Queues versus Request / Response, cette dernière est lorsque la demande est traitée de manière synchrone.
la source
Les files d'attente de messages sont asynchrones et peuvent réessayer plusieurs fois si la livraison échoue. Utilisez une file d'attente de messages si le demandeur n'a pas besoin d'attendre une réponse.
L'expression «services Web» me fait penser aux appels synchrones vers un composant distribué via HTTP. Utilisez les services Web si le demandeur a besoin d'une réponse.
la source
Je pense qu'en général, vous voudriez un service Web pour une tâche de blocage (ces tâches doivent être terminées avant d'exécuter plus de code), et une file d'attente de messages pour une tâche non bloquante (cela pourrait prendre un certain temps, mais nous ne pas besoin de l'attendre).
la source