0

J'ai un projet nodejs qui expose une simple API de repos pour une application Web externe. Ce webhook doit faire face à un grand nombre de requêtes par seconde et renvoyer 200 OK très rapidement à l'appelant. Pour que cela se produise, j'étudie une file d'attente redis simple pour être mise en file d'attente avec chaque requête à traiter de manière asynchrone plus tard (via un thread consommateur).File d'attente de messages NodeJS avec Redis - Comment définir plusieurs consommateurs (threads)

La file d'attente simple, Redis semble être un moyen facile de réaliser cette tâche (https://github.com/smrchy/rsmq)

1) Est-ce rsmq.receiveMessage() {} ....... une méthode de blocage? Si ce gestionnaire est lent, cela affectera-t-il les performances de mon serveur?

2) Si la réponse à la question 1 est vraie - Est-il recommandé d'extraire la consommation des messages vers un micro service externe? (un consommateur dédié)? Quelles sont les meilleures pratiques pour créer des consommateurs multi-thread sur un tel environnement?

+0

Ceci est en rapport avec https://stackoverflow.com/questions/34422094/multple-node-js-message-recievers-for-a-redis-queue –

Répondre

0

Vous pouvez utiliser la fonction PubSub fournie par Redis https://redis.io/topics/pubsub

Vous pouvez publier sur différents canaux sans aucune connaissance des abonnés. Les abonnés peuvent s'abonner aux chaînes qu'ils souhaitent.

Sreeni

+0

Oui, mais je demandais en ce qui concerne la capacité de nodejs en tant que consommateur (est-ce une bonne pratique de créer plusieurs écouteurs avec le noeud? ou devrais-je extraire mes consommateurs en dehors du projet?) – Urbanleg

0

1) Non, il ne bloque pas la boucle d'événement, mais vous ne commencer le traitement d'un second message une fois que vous appelez la méthode « suivant », c.-à-vous traiter un message à la fois . Pour surmonter cela, vous pouvez démarrer plusieurs travailleurs en parallèle. Jetez un coup d'oeil ici: https://stackoverflow.com/a/45984677/7201847

2) C'est une décision architecturale qui dépend de la charge que vous devez supporter et de la capacité matérielle dont vous disposez. Je recommande au moins deux processus Node.js, un pour ajouter les messages à la file d'attente et un autre pour les traiter réellement, avec l'option de lancer des processus de travail supplémentaires si nécessaire, en fonction des résultats de vos tests de performance.