我正在创建一个Java应用程序,需要在JVM之间进行主从通信,可能驻留在同一台物理机器上。将有一个“主”服务器在Java EE应用服务器(即JBoss)中运行,将连接“从”客户端并动态注册自己以进行通信(也就是说主服务器不知道从服务器的IP地址/端口,因此无法提前配置)。主服务器充当控制器,将工作分配给从服务器,并且从服务器会定期响应通知,因此将进行双向通信。
我最初考虑使用基于RPC的系统,其中每个端点都是服务器,但这可能会变得复杂,因此我更喜欢一种机制,在其中有一个开放的套接字,它们相互交流。
我正在寻找一种通信机制,其低延迟,消息主要是原始类型,因此不需要严肃的序列化。以下是我查看过的内容:
- RMI
- JMS:内置于Java中,“从”客户端将连接到应用程序服务器中的现有ConnectionFactory。
- JAX-WS / RS:主和从均将成为服务器,公开用于双向通信的RPC接口。
- JGroups / Hazelcast:使用共享的分布式数据结构来促进通信。
- Memcached / MongoDB:将其用作“队列”以促进通信,尽管客户端必须轮询,因此会有一些延迟。
- Thrift:这似乎保持着持久连接,但不确定如何将Thrift服务器集成/嵌入到JBoss中
- WebSocket / Raw Socket:这将起作用,但需要比我想要的更多的自定义代码。
我是否忽略了任何技术?
编辑:还查看了:
- JMX:使客户端连接到JBoss的JMX服务器并接收JMX通知以进行双向通信。