2011-08-03 4 views
2

J'ai un superviseur qui surveille deux processus fils; un processus primaire et un processus de sauvegarde (dans le cas où le processus primaire se termine).Superviseurs Erlang - boîtes aux lettres de processus partagés

Si le processus principal est interrompu alors qu'il y a encore des messages dans sa boîte aux lettres, le processus de sauvegarde peut-il prendre en charge et traiter les messages laissés dans la boîte aux lettres principale d'origine?

+1

Nœuds ou processus? Ce sont deux concepts différents dans le monde d'Erlang. –

Répondre

0

Si vous voulez dire des processus au lieu de nœuds, et vous voulez vous assurer que tous les messages entrants sont traités. Soit par le processus primaire, soit par le processus de sauvegarde, il est préférable de stocker les messages entrants directement dans une table Mnesia. De cette façon, vous pouvez continuer le traitement dans le processus de sauvegarde.

Cela dit, je pense que le problème que vous essayez de résoudre peut être géré automatiquement par OTP. Vous n'avez jamais besoin de créer des processus de sauvegarde. Vous pouvez juste dire au superviseur de réappeler le même gen_server si un crash s'est produit.

+1

[Question d'un lecteur intéressé]. Cela signifie-t-il que la boîte aux lettres d'un processus survit à une réapparition? c'est-à-dire que tous les messages dans la boîte aux lettres avant la résiliation seront toujours présents lorsque le processus sera réapparu? THX. – sfinnie

+0

Non, c'est perdu, c'est pourquoi vous devez le mettre dans une table ets ou Mnesia. –

+0

ah - ok. Je ne pensais pas qu'ils ont survécu, il suffit de lire votre réponse mal. Merci de clarifier. – sfinnie

0

Ce que je fais généralement dans une telle situation est de pousser les messages entrants dans une table ets. Il y a quelques subtilités à cela. Discuté plus loin here

Questions connexes