2010-07-21 30 views
3

我需要从我的应用程序管理代理池。所有这些都是用Java编写的,但代理需要在他们自己的JVM中运行。我写了一个启动子进程的概念证明,并使用stdout/stdin发送命令和保持活动信息。我还打开一个用于数据传输的套接字连接。管理JVM代理池和通信

我想有些连接池库应该能够帮助管理代理。

代理商与主流程之间的沟通如何?使用带有XML消息的TCP(JAXB)并不像我想的那样可靠或方便。任何建议更好的图书馆在这里协助?

我可以很好地写出自己需要的东西,但我确信其他人已经做得更好了。

回答

1

对于消息可以尝试像ZeroMQ,它是一个通讯工具和具有本地传输进程之间communicationg ,那么你可以在进程之间序列化对象。

另一种方法是回到传统的rmi,可能是最简单的。

+0

此外,根据环境(在许多企业环境中已经设置),通用的JMS或Tibco RV可能是一个选项。 – ddimitrov 2010-08-04 15:00:49

+0

我接受zeromq作为答案,即使我无法使用它(我需要一个完整的java堆栈来实现可移植性)。事实上,ZeroMQ真的很酷。我仍然必须实现我自己的序列化机制...... – 2012-06-12 09:52:26

0

其实我已经发现了两个办法,将有很大的帮助,当我开发了这个:

  1. 的WebSockets。我使用了简单的socket,但是我需要重新发送信号来检查发送和发送的东西。我使用了基于行的方法,但它确实很难看。 WebSockets提供基于消息的通信,这很好。
  2. Hazelcast。这是一个“分布式系统”,并提供诸如分布式执行程序之类的优秀功能(我计划在应用程序服务器中发送消息并让任何可用的jvm代理以原子方式处理它),共享的和线程安全的hashmaps(要保留跟踪谁在运行)等等。我见过的许多类似工具都是使用本机代码(比如ZeroMQ btw)或者使用per-CPU许可证等。 Hazelcast是社区版,可以捆绑到我的应用程序中。

实际上,我已经开始使用vert.x来处理基于websocket的通信,并意识到它本身使用了hazelcast。