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

2022-09-02 10:42:27

我正在创建一个Java应用程序,该应用程序需要JVM之间的主从通信,可能驻留在同一台物理机器上。在Java EE应用服务器(即JBoss)内将运行一个“主”服务器,该服务器将有“从”客户端连接到它并动态注册自身以进行通信(即主服务器将不知道从属服务器的IP地址/端口,因此无法提前配置)。主服务器充当控制器,它将向从站工作,从站将定期响应通知,因此将进行双向通信。

我最初想到的是基于RPC的系统,其中每一端都是一个服务器,但它可能会变得复杂,所以我更喜欢一种机制,其中有一个开放的套接字,它们来回交谈。

我正在寻找一种低延迟的通信机制,其中消息主要是基元类型,因此不需要认真的序列化。以下是我所看到的:

  • 马绍尔群岛共和国
  • JMS:内置于Java,“从属”客户端将连接到应用程序服务器中的现有ConnectionFactory。
  • JAX-WS/RS:主服务器和从服务器都是公开 RPC 接口以进行双向通信的服务器。
  • JGroups/Hazelcast:使用共享的分布式数据结构来促进通信。
  • Memcached/MongoDB:将这些作为“队列”来促进通信,尽管客户端必须进行轮询,因此会有一些延迟。
  • 节俭:这似乎确实保持了持久的连接,但不确定如何将节俭服务器集成/嵌入到JBoss中。
  • WebSocket/Raw Socket:这可以工作,但需要比我想要的更多的自定义代码。

我错过了什么技术吗?

编辑:还看了:

  • JMX:让客户端连接到 JBoss 的 JMX 服务器,并接收双向通信的 JMX 通知。

答案 1

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


答案 2

老实说,我会坚持使用JMS。你有一个队列,你的从站可以取出消息,还有一个队列,他们把它们放回去。您可以直接在信封上设置有关谁处理了每封邮件(用于记帐)的属性。您可以获得许多J2EE提供程序(glassfish,jboss)的持久性。

此外,您可以轻松地迁移到多服务器分布式JVM,而无需额外的编程。

但是,在某些情况下,它可能不符合“低延迟”的定义。


推荐