管理JVM外的代理池和通信

3

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

我猜测一些连接池库应该能够帮助管理代理。

那么代理和主进程之间的通信呢?使用TCP和XML消息(JAXB)不如我所希望的那样可靠或方便。是否有更好的库可以协助解决这个问题?

我很可能可以自己编写所需内容,但我相信其他人已经做得更好了。

3个回答

1

对于消息传递,您可以尝试使用ZeroMQ这样的工具,它是一种消息传递工具,并且具有用于进程间通信的本地传输功能,然后您只需在进程之间序列化对象即可。

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


此外,根据环境的不同(在许多公司环境中已经设置好了),通用的JMS或Tibco RV也可能是一个选择。 - ddimitrov
我接受zeromq作为答案,尽管我不能使用它(我需要一个完整的Java堆栈来实现可移植性)。事实上,ZeroMQ真的很酷。我仍然不得不实现自己的序列化机制... - Eric Darchis

0

0

当我开发这个项目时,实际上我找到了两种非常有用的方法:

  1. WebSockets。我一开始使用的是简单的sockets,但后来我需要重新创造信令以检查谁在发送和完成发送。我采用了基于行的方法,但它真的很丑陋。WebSockets提供消息传递通信,这非常棒。
  2. Hazelcast。这是一个“分布式系统”,提供了很多伟大的东西,比如分布式执行程序(我在应用服务器中安排要发送的消息,并让任何可用的jvm外代理处理它,具有原子性),共享和线程安全的哈希映射(用于跟踪正在运行的人)等。我看到的许多类似工具要么是在本地代码中(例如ZeroMQ),要么是带有每个CPU许可证之类的东西。Hazelcast是社区版,可以捆绑到我的应用程序中。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接