web-dev-qa-db-fra.com

Dois-je fermer la chaîne / connexion après chaque publication?

J'utilise amqplib dans Node.js et je ne suis pas sûr des meilleures pratiques dans mon code.

Fondamentalement, mon code actuel appelle la amqp.connect() lorsque le serveur Node démarre, puis utilise un canal différent pour chaque producteur et chaque consommateur, sans jamais fermer aucun d'entre eux. Je voudrais savoir si cela a un sens, ou dois-je créer la chaîne, la publier et la fermer chaque fois que je veux publier un message. Et qu'en est-il de la connexion? Est-ce une "bonne pratique" de se connecter une fois, et puis le garder ouvert pendant toute la durée de vie de mon serveur?
Côté consommateur - puis-je utiliser une seule connexion et un seul canal pour écouter sur plusieurs files d'attente?

Merci pour tout éclaircissement

14
Noam Gal

En général, ce n'est pas une bonne pratique d'ouvrir et de fermer des connexions et des canaux par message. Les connexions sont durables et il faut des ressources pour continuer à les ouvrir et les fermer. Pour les canaux, ils partagent la connexion TCP avec la connexion afin qu'ils soient plus légers, mais ils consommeront toujours de la mémoire et ne devraient certainement pas être laissés ouverts après avoir fini de les utiliser.

Il est recommandé d'avoir un canal par thread et un canal par consommateur. Mais pour la publication, il est tout à fait correct d'utiliser le même canal. Mais gardez à l'esprit qu'en fonction des opérations, le protocole peut tuer le canal dans certaines situations (par exemple, vérification de l'existence de la file d'attente), alors préparez-vous à cela. Il existe également des limites souples (configurables) et strictes (généralement 65535) sur le nombre maximal de canaux sur de nombreuses implémentations client.

Donc, pour résumer, selon votre cas d'utilisation, utilisez une à quelques connexions, ouvrez des canaux lorsque vous en avez besoin et partagez-les quand cela a du sens, mais n'oubliez pas de les fermer lorsque vous avez terminé.

Le rabbitmq documentation explique la nature des connexions et des canaux (fin du document). Et la réponse acceptée sur cette question contient de bonnes informations sur le sujet.

23
Mikko