Rabbit MQ dans le système de traitement des résidents



Récemment, ils ont réussi à mettre en service un système de traitement des utilisateurs pour les citoyens. L'essentiel est que lorsque vous n'avez pas d'eau, de chauffage ou un énorme trou dans la route près de votre maison, vous pouvez vous plaindre d'un problème dans les agences gouvernementales. Il existe différentes plates-formes où vous pouvez déposer une plainte: sites Web des institutions publiques, pages sur les réseaux sociaux, centres d'appels.

Notre tâche était de créer un pipeline unique pour le traitement des demandes pour tous les départements.
L'objectif principal du système est d'accélérer au maximum le processus de traitement des appels: automatiser tout ce qui est automatisé, contrôler le timing à chaque étape du processus, informer les résidents de chaque étape.

L'une des tâches spécifiques du projet était la question de l'intégration avec un grand nombre de systèmes externes.

  • Il a fallu apprendre des différents sites pour prendre en charge l'intégralité du flux de plaintes, pouvoir communiquer avec eux sur tous les changements avec les candidatures, entretenir la correspondance entre fonctionnaires et citoyens pour clarifier les détails des plaintes.
  • De plus, nous avons cédé certaines fonctions à des services tiers.

Parce que Il y avait beaucoup de données, devaient souvent travailler en mode asynchrone, puis l'équipe de projet devait résoudre le problème, afin de ne pas s'étrangler et les systèmes tiers. La solution a été trouvée dans le courtier de messages logiciel Rabbit MQ. C'était une nouvelle technologie pour l'équipe à l'époque.

Ci-dessous, une interview du développeur du backend du projet, Alexander Shcheglov, WilyLynx , qui a traité le problème et mis en œuvre l'intégration.

- Sasha, bonjour! Veuillez nous dire en quelques mots ce qu'est Rabbit MQ?

Le logiciel est principalement destiné à l'implémentation d'une messagerie différée entre différents clients, c'est-à-dire quand vous n'avez pas besoin de réponse pour le moment.

- Je comprends bien qu'en général cela fonctionne comme ceci: le service d'envoi dans la file d'attente créée met les données telles qu'elles sont générées, le service de réception prend ces informations si nécessaire?

C'est exactement ce qui fonctionne.

- Pourquoi avez-vous (l'équipe de développement) choisi cette solution pour le projet?

Pour plusieurs raisons. Premièrement, dans notre cas, le traitement synchrone (reçu et traité en même temps) n'est pas critique, c'est-à-dire un message peut se bloquer dans la file d'attente pendant un certain temps. De plus, facilité d'utilisation: pour recevoir des messages il suffit de déclarer le nom de la file d'attente et pas besoin d'écrire vos services. Eh bien, la disponibilité des bibliothèques pour le PJ commun. Pas besoin d'inventer quoi que ce soit pour travailler avec RabbitMQ.

- Je comprends bien que Rabbit MQ vous permet de contrôler l'échange de données entre les systèmes et les services Web?

Au contraire, nous gérons toujours l'échange, mais le «lapin» est un excellent outil pour organiser cet échange. Ici, vous avez la durée de vie des messages dans les files d'attente, la longueur maximale de la file d'attente, les paramètres d'accès, la mise en cluster et divers protocoles d'échange, un système de plug-in et plus encore.

- Comment est-il déterminé que le message a été délivré? - c'est-à-dire, comment est-il déterminé que le client a prolongé quelque chose après la réception ou a suspendu le processus?

Il est considéré comme livré si, dans un certain délai, une réponse du client arrive. Il dit en fait qu'il a reçu et était satisfait de la vie. Le client peut envoyer une réponse dès sa réception, puis essayer de traiter le message. Peut-être, au contraire, essayez d'abord de traiter et, en cas de succès, d'envoyer une réponse. Ou vous pouvez informer le lapin à l'avance afin qu'il n'attende pas la confirmation de livraison de votre part et ne reçoive que des messages. Tous les articles envoyés seront automatiquement considérés comme livrés.

- Est-il possible, par exemple, de ne pas recevoir tous les messages d'une manière ou d'une autre, mais par exemple de ne s'abonner qu'aux messages d'une application spécifique?

La situation est légèrement différente. Il existe une option pour envoyer des messages dans lesquels les messages parviennent à tous les clients. Cette option est appelée «publier / s'abonner». Un bon exemple: un nouveau message dans votre public. Vous avez envoyé, tous les signataires ont été reçus. Et dès leur réception, ils pensaient lire ou ne pas lire. En général, personne ne vous dérange pour créer une file d'attente distincte pour vous-même et ne travailler qu'avec elle. Dans ce cas, le routage sera déjà au niveau de l'application, et le lapin comme canal de communication.

- Sasha, dis-moi, y a-t-il une option pour ne pas créer des milliers de files d'attente, mais pour faire du filtrage et du routage pour une seule?

À partir de l'un, cela ne fonctionnera pas, mais Rabbit permettra un routage.

- Veuillez nous en dire plus.

L'un d'eux ne l'est pas, mais il existe des concepts tels que «échange» et «clé de routage»:

P - producteur, expéditeur du message en échange
X - s'échanger
Rayures rouges - lignes
C1 et C2 - destinataires



Pabbit peut envoyer un message en échange d'une certaine clé (par exemple, erreur / info / avertissement). Et comme vous pouvez le voir, différents destinataires sont orientés vers la réception de messages avec différentes clés de routage. De plus, seul C2 recevra un message avec la touche «info», et les deux recevront un message avec la touche «error». Il est également possible de recevoir des messages selon le modèle de la clé. Il s'agit d'un autre type d'échange «Publier / S'abonner», que j'ai mentionné plus tôt.



Comme vous pouvez le voir, en tout cas, pour chacun des destinataires de ces types d'échanges, il y a un tournant, mais à la fin, nous avons encore une sorte de filtrage / routage.

- Que pouvez-vous rappeler des problèmes survenus lors de l'étude et de la mise en œuvre de Rabbit?

Outre la paresse, non. Sérieusement, une documentation claire, un grand nombre d'exemples.

- Avez-vous déjà transféré tous les échanges avec les services et les systèmes externes?

Nous avons désormais 38 files d'attente: échange entre circuits, systèmes externes, BI. Mais malheureusement, certains services (lire les départements) résistent. parce que ils ont mis en place le repos. De plus, certains types d'interactions impliquent la réception simultanée de réponses aux demandes.

- Que pensez-vous de la réussite de cette décision?

Pour une collaboration inter-agences qui ne nécessite pas de réponse synchrone? Pour moi, c'est une excellente option.

Liste des matériaux utilisés

Source: https://habr.com/ru/post/fr441008/


All Articles