2 votes

AKKA : Communiquer via une file d'attente de messagerie

Nous avons un composant écrit en Groovy ( appelons-le "G-Component" ) qui doit communiquer avec un composant écrit en Scala / AKKA ( appelons-le "A-Component" ).

Ce qui répond le mieux à nos besoins, c'est une file d'attente de messagerie :

"G-COMPONENT" <==> in memory messaging queue <==> "A-COMPONENT"

Pour le "G-COMPONENT", la vie est simple :

queue.send( message )
message = queue.receive()

Pour le composant AKKA, cela semble un peu plus compliqué, puisqu'il y a un acteur qui doit "gérer"/"recevoir" des messages et être capable de "renvoyer" des messages.

Le problème est la partie "recevoir", car il doit maintenant entrer dans une boucle propre pour écouter les messages de la file d'attente. Ce qui l'empêche d'être un acteur AKKA, puisqu'une fois qu'il est dans cette boucle, il ne peut plus recevoir de messages AKKA.

J'apprécierais toute aide sur la solution propre pour cela, sans implémenter un plugin AKKA de "cette implémentation particulière de file d'attente" Boîte aux lettres de l'acteur.

3voto

Henry VIII Points 157

convertir une "édition de question" en une réponse

J'ai trouvé un développement intéressant de l'API AKKA qui n'a pas encore été officiellement publiée :

" Akka fournit une fonction Module ZeroMQ qui fait abstraction d'une connexion ZeroMQ et permet donc à l'interaction entre les acteurs Akka d'avoir lieu sur des connexions ZeroMQ. "

Il semble que je puisse avoir une méthode AKKA pour créer un auditeur ZeroMQ :

val listener = actorOf(new Actor {
  def receive: Receive = {
    case message: ZMQMessage => ...
    case _ => ...
  }
}).start

val socket = ZMQ.newSocket(SocketParameters(context, SocketType.Sub, Some(listener)))
socket ! Connect("tcp://127.0.0.1:1234")
socket ! Subscribe(Seq())

confirmé par Viktor Klang (question commentaires) c'est la voie à suivre

1voto

Andrew Points 221

Cela peut paraître évident, mais Akka dispose d'une excellente intégration avec camel et amqp.

http://akka.io/docs/akka-modules/1.2/modules/camel.html http://akka.io/docs/akka-modules/1.2/modules/amqp.html

Je ne suis pas sûr de ce que vous entendez par "sans implémenter un plugin AKKA de "cette implémentation particulière de la file d'attente" Actor mailbox". Cela signifie-t-il que vous ne voulez pas utiliser ces composants ?

0voto

Michael Dillon Points 18741

AKKA est une bibliothèque et non un langage de programmation.

Il suffit d'écrire l'écouteur de messages zeromq à l'extérieur d'un acteur, et de lui faire envoyer les messages zeromq entrants aux acteurs AKKA. J'ai fait cela avec AMQP en utilisant la bibliothèque Java AMQP client et cela fonctionne très bien.

Si vous souhaitez que l'auditeur ZeroMQ soit exécuté dans une boucle d'événements, il est assez facile d'écrire le vôtre en utilisant le poller select http://api.zeromq.org/2-1:zmq-poll Jetez un coup d'œil au code source de ConcurrentSocketActor dans le module AKKA zeromq, car c'est ce qu'il utilise. C'est un bon modèle si vous avez besoin de développer votre propre acteur concurrent pour un autre type de communication réseau.

C'est le même problème que les gens rencontrent lorsqu'ils veulent ajouter une interface de gestion accessible par le réseau à une application non réseau dans n'importe quel langage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X