Управление пулом агентов вне JVM и обменом данными

Мне нужно управлять пулом агентов из моего приложения. Все они написаны на Java, но агенты должны работать на собственной JVM. Я написал доказательство концепции, которое запускает подпроцессы и использует stdout/stdin для отправки команд и информации для поддержания активности. Я также открываю соединение сокета для передачи данных.

Я предполагаю, что некоторые библиотеки пулов соединений должны помочь в управлении агентами.

Как насчет связи между агентами и основным процессом? Использование TCP с XML-сообщениями (JAXB) на самом деле не так надежно и удобно, как хотелось бы. Любое предложение по лучшей библиотеке, чтобы помочь здесь?

Я вполне мог бы сам написать то, что мне нужно, но я уверен, что другие люди уже сделали это лучше.


person Eric Darchis    schedule 21.07.2010    source источник


Ответы (3)


Для обмена сообщениями можно попробовать что-то вроде ZeroMQ, это инструмент обмена сообщениями и имеет локальные транспорты для связи между процессами, тогда вы может просто сериализовать объекты между процессом.

Альтернативой является возвращение к традиционному rmi, вероятно, самому простому.

person crafty    schedule 22.07.2010
comment
Кроме того, в зависимости от среды может использоваться универсальный JMS или Tibco RV (во многих корпоративных средах они уже настроены). - person ddimitrov; 04.08.2010
comment
Я принимаю zeromq в качестве ответа, хотя я не мог его использовать (мне нужен был полный стек Java для переносимости). На самом деле ZeroMQ действительно крут. Мне все еще пришлось реализовать свой собственный механизм сериализации... - person Eric Darchis; 12.06.2012

Вы можете попробовать Гессен:

http://hessian.caucho.com/

или Преон:

http://preon.sourceforge.net/

person Jon    schedule 21.07.2010

На самом деле я нашел два способа, которые очень помогли бы мне, когда я разработал это:

  1. Веб-сокеты. Я использовал простые сокеты, но затем мне пришлось заново изобретать сигнализацию, чтобы проверить, кто что отправляет, и сделал отправку. Я использовал линейный подход, но он действительно уродлив. WebSockets предлагают связь на основе сообщений, и это здорово.
  2. Хейзелкаст. Это «распределенная система», предлагающая замечательные возможности, такие как распределенные исполнители (я планирую отправку сообщения на сервер приложений и позволяю любому доступному агенту вне jvm обрабатывать его атомарно), общие и потокобезопасные хэш-карты (чтобы сохранить отслеживать, кто работает) и т. д. Многие из подобных инструментов, которые я видел, были либо в собственном коде (например, ZeroMQ между прочим), либо с лицензиями на процессор и т. д. Hazelcast — это версия для сообщества, и ее можно включить в мои приложения.

На самом деле, я начал использовать vert.x для обработки связи на основе веб-сокетов и понял, что он сам использует hazelcast.

person Eric Darchis    schedule 20.11.2012