2016-12-14 1 views
0

j'ai un actorsystem qui a 3 acteurs et qui sont énumérés ci-dessousComment restreindre un acteur dans le cluster akka actorsystem à exécuter dans un seul noeud

  1. RMQreaderActor - Ceci est l'acteur qui lit les messages du RMQ et indique les deux acteurs ci-dessous pour convertir le message et le traiter
  2. ConverterActor
  3. ProcessorActor

Mon exigence est de regrouper les actorsystem en 4 nœuds, mais je fais ne veut pas que RMQreaderactor dans tous les nœuds lise les messages de la file d'attente. Un seul nœud devrait lire le message et dire aux autres acteurs de le traiter.

Note: Si je fais RMQreaderactor de tous les noeuds à lire les messages de la file d'attente, alors il est à l'origine d'une lecture double (comme je ne délivre pas le Ack dès que je l'ai lu)

Pourriez-vous s'il vous plaît aider moi avec mon exigence

Répondre

0

Ma suggestion ne va pas ce chemin! Puisque vous désirez avoir un 4 groupe de noeuds est préférable de profiter des avantages de tous de plusieurs raisons:

  • dans le cas où le noeud tombe en panne, vous ne disposez pas de redondance, donc SPOF
  • si certains d'autres actions créent une pression dans ce nœud, la performance du système est affecté et vous avez un goulot d'étranglement

vous pouvez laisser tous les nœuds pour exécuter RMQreaderActor et que vous utilisez (lapin mq) Unacked msg ne seront pas comptabilisés par un autre consommateur (autre instance de RMQreaderActor d'un autre noeud) - à moins qu'il y ait quelque chose que je n'obtiens pas chez votre consommateur.

Si cela ne vous convainc pas, veuillez lire (rôles de nœuds de cluster, singletons et acteurs proxy) http://doc.akka.io/docs/akka/current/scala/cluster-singleton.html - vous voyez ici comment avoir un acteur singleton (instance unique d'un acteur dans tous les nœuds de cluster).