2010-06-04 34 views
7

J'utilise erlang comme un pont entre les services et je me demandais quels conseils les gens avaient pour gérer les connexions au sol?Erlang Supervisor Stratégie pour redémarrer les connexions aux hôtes à terre

Je prends les entrées des fichiers locaux et les achemine vers AMQP et il est concevable que le courtier AMQP puisse descendre. Pour ce cas, je voudrais continuer à essayer de me connecter au serveur AMQP mais je ne veux pas attacher le CPU avec ces tentatives de connexions. Mon envie est de mettre un sommeil dans le redémarrage du code AMQP. Ce «piratage» ne contournerait-il pas essentiellement le but d'échouer rapidement et de laisser Erlang le gérer? Plus généralement, le comportement du superviseur erlang devrait-il être utilisé pour gérer les connexions au sol?

Répondre

3

Je pense qu'il est raisonnable de coder soi-même sa propre sémantique pour gérer les connexions à un serveur externe. Les superviseurs sont les mieux adaptés pour gérer les processus écrasés/verrouillés/autrement malsains dans votre propre arbre de processus et non les reconnexions à un service externe.

Votre processus traite-t-il les fichiers locaux dans la même arborescence de processus que le courtier AMQP ou est-ce un service distinct?

+0

Je suis d'accord. Peut-être que les superviseurs ne devraient pas jouer dans la logique métier, ils sont juste là pour gérer les processus morts et maintenir la cohérence (one_for_all, one_for_one, etc.). Et oui, le piper de fichiers et le processus client AMQP sont des processus distincts. Le erlang-amqp-client crée un processus pour chaque connexion (ou est-ce le canal?), Maintenant je dois juste le gérer en train de mourir. Beaucoup à apprendre! – xrl