2 votes

Découpler la couche synchrone des webservices avec RabbitMQ, bonne ou mauvaise idée ?

Dans mon projet actuel, nous mettons en œuvre une couche de services Web et nous voulons découpler cette couche en utilisant RabbitMQ. Au final, cela me donne une couche de services Web très fine. Le problème est que tous les appels de services Web sont synchrones. L'appelant de la couche webservice a besoin d'obtenir une réponse.

Je me demandais si c'était une bonne ou une mauvaise idée de faire le découplage avec RabbitMQ ?

4voto

Steve Martin Points 1580

Si vous basez votre service web sur un modèle CQRS où les mises à jour/insertions sont traitées séparément des requêtes, vous pouvez utiliser Rabbit de manière découplée pour traiter les insertions/mises à jour de telle sorte que la requête du service web dépose un message contenant les informations à insérer/mettre à jour dans une file d'attente, puis revient. De cette façon, vous n'attendez pas que la base de données engage une transaction. Vous auriez alors un service séparé pour consommer ces messages et faire les appels appropriés d'insertion/mise à jour de la base de données.

Vos requêtes devront évidemment continuer à interagir directement avec votre base de données afin de renvoyer des informations.

Quant à savoir si c'est une bonne ou une mauvaise idée, c'est entièrement subjectif. Si votre base de données est assez simple et que les insertions/mises à jour ne prennent pas un temps appréciable, vous risquez d'introduire de la complexité pour un gain net faible ou nul. Par exemple, vous pourriez utiliser le javascript pour faire des appels asynchrones à votre service Web pour gérer les messages, ce qui permettrait à l'utilisateur final de bénéficier d'une expérience réactive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X