什么是一个很好的基于Java的主从通信机制?

Phu*_*ong 20 java rpc jms rmi master-slave

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

par*_*oir 5

好吧,如果您正在寻找基于Java的东西,我建议使用JMS.它具有您正在寻找的所有功能以及强大的应用程序服务器,如JBoss.但是,另一个不完全基于Java并且不使用Queues的选项将使用HTTP协议和JAXB(RESTful Web服务).这是双方沟通的一种非常轻松的方式.您的对象将使用JAXB转换为XML,并将转移到另一侧,然后在收到对象后将其转换回对象.


Enn*_*oji 0

我们有一个类似的应用程序,我们只是在 JBoss 上使用 Servlet,“从属”以计时器驱动的方式命中它。这没问题,但对于低延迟来说并不是最佳选择。

我们现在正在研究 Netty。您可以使用任何您想使用的协议。我们可能会使用 HTTP 和 JAXB。我想这可以归类为“WebSocket/Raw Socket”,但它比使用原始套接字要好得多。