АККА: общение через очередь сообщений - PullRequest
2 голосов
/ 10 января 2012

У нас есть компонент, написанный на Groovy (назовем его «G-компонент»), который должен взаимодействовать с компонентом, написанным на Scala / AKKA (назовем его «A-компонент»).

Что больше всего соответствует нашим потребностям, так это очередь сообщений:

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

Для "G-COMPONENT" жизнь проста:

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

Для компонента AKKA это кажется немного более сложным, поскольку существует актер, который должен «обрабатывать» / «получать» сообщения и иметь возможность «отправлять» сообщения обратно.

Проблема заключается в части «получения», так как теперь ей нужно войти в собственный цикл для прослушивания сообщений из очереди.Который .. отключает его как AKKA Actor, так как, когда он находится в этом цикле, он не может получать никаких сообщений AKKA.

Был бы признателен за любую помощь в чистом решении для этого, без реализации плагина AKKA«Эта конкретная реализация очереди» Actor mailbox.

Ответы [ 3 ]

3 голосов
/ 10 января 2012

преобразование "редактирование вопроса" в ответ

Нашел интересную разработку еще не выпущенного официально API AKKA:

" Akka предоставляет модуль ZeroMQ , который абстрагирует соединение ZeroMQ и, следовательно, позволяет взаимодействовать между актерами Akka по соединениям ZeroMQ. "

Кажется, у меня может быть способ AKKA порождать слушателя 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())

подтверждено Виктором Клангом (комментарии к вопросу), по этому пути

1 голос
/ 10 января 2012

Это может быть очевидно, но у Akka есть отличная интеграция верблюдов и amqp.

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

Я не уверен, что вы имеете в виду под «без использования плагина AKKA для« конкретной реализации очереди »почтового ящика актера». Значит ли это, что вы не хотите использовать эти компоненты?

0 голосов
/ 11 января 2012

AKKA - это библиотека, а не язык программирования.

Просто напишите прослушиватель сообщений zeromq вне субъекта и попросите его отправлять входящие сообщения zeromq субъектам AKKA.Я сделал это с помощью AMQP, используя клиентскую библиотеку Java AMQP, и она прекрасно работает.

Если вы хотите, чтобы прослушиватель ZeroMQ работал в цикле событий, тогда достаточно легко написать свой собственный, используяselect poller http://api.zeromq.org/2-1:zmq-poll Посмотрите на исходный код ConcurrentSocketActor в модуле AKKA zeromq, потому что это то, что он использует.Это было бы хорошей моделью, если вам когда-либо понадобится использовать свой собственный параллельный субъект для какого-либо другого типа сетевого взаимодействия.

И это та же проблема, что и у людей, когда они хотят добавить доступный для сети интерфейс управления кне сетевое приложение на любом языке.

...