2015-05-15 13 views
6

Utilizzo il flusso di eventi di Akka in un'app Play come bus di eventi in cui posso pubblicare eventi e sottoscrivere ascoltatori e volevo sapere quali sono i trucchi che dovrei prendere in considerazione. Nello specifico ci sono due cose:Come utilizzare correttamente il flusso eventi di Akka?

  • Ogni listener viene implementato tramite un attore che riceve gli eventi pubblicati e li elabora. Cosa succede se la coda dei messaggi dell'attore inizia a diventare grande? Come posso implementare la contropressione in sicurezza, garantendo che ogni evento venga elaborato?
  • Relativo al precedente: come posso mantenere gli eventi non elaborati in modo che, in caso di errore, l'applicazione possa ricominciare ed elaborarli? Sono a conoscenza dell'esistenza di akka-persistence, ma non sono sicuro che sarebbe la cosa giusta da fare in questo caso: gli attori Listener non sono statici, non hanno bisogno di ripetere gli eventi passati, io solo desidera memorizzare eventi non elaborati ed eliminarli una volta che sono stati elaborati.

risposta

2

Considerando i vincoli, non utilizzerei il bus eventi di Akka per questo scopo.

ragioni principali sono:

  1. consegna - Non ci sono garanzie che gli ascoltatori di eventi sono in realtà di ascolto (senza ACK). È possibile perdere alcuni eventi lungo la strada.
  2. Persistenza - Non esiste un modo integrato per preservare lo stato del bus di eventi.
  3. Scaling - Il bus eventi di Akka è un locale, il che significa che non è adatto se in futuro si desidera creare un cluster.

Il modo più semplice per gestirlo sarebbe utilizzare la coda di messaggi come RabbitMQ. Mentre tornavo stavo usando sstone/amqp-client. MQ può fornire code persistenti (coda per ogni tipo listener/listener).

Problemi correlati