我正在创建一个 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 通知。