在JavaEE应用程序之间进行同步调用的最佳方法

在JavaEE应用程序之间进行同步调用的最佳方法,java,jakarta-ee,rmi,message-queue,esb,Java,Jakarta Ee,Rmi,Message Queue,Esb,我有两个JavaEEWeb应用程序,它们将发布在同一个物理服务器上,但在不同的网络地址上 应用程序A:侦听公共IP地址上的端口,并在必要时对应用程序B进行同步调用 应用程序B:侦听专用IP地址上的端口,并在必要时对应用程序a进行同步调用 对于连接应用程序A和应用程序B,我正在考虑以下备选方案 RMI 消息队列 轻量级ESB 请告诉我,如果你在任何一个方面都有明显的优势,或者有其他的技术需要考虑。 < P>每一个集成方法都有它的优点和缺点,而且很难只根据你所提供的来提出一个,但是这里有一些提

我有两个JavaEEWeb应用程序,它们将发布在同一个物理服务器上,但在不同的网络地址上

应用程序A:侦听公共IP地址上的端口,并在必要时对应用程序B进行同步调用

应用程序B:侦听专用IP地址上的端口,并在必要时对应用程序a进行同步调用

对于连接应用程序A和应用程序B,我正在考虑以下备选方案

  • RMI
  • 消息队列
  • 轻量级ESB

请告诉我,如果你在任何一个方面都有明显的优势,或者有其他的技术需要考虑。

< P>每一个集成方法都有它的优点和缺点,而且很难只根据你所提供的来提出一个,但是这里有一些提示:

  • 快速简便:如果您不介意高耦合,并且不希望应用程序发生重大更改(如DB engine,或用非Java系统替换on),则可以使用RMI甚至DB过程调用
  • 更改、可扩展性和可伸缩性:如果应用程序的更改预期比很少发生的(而且它们往往会发生更改),ESB或消息队列将非常好,因为它们将产生松散耦合的体系结构。这也为可扩展性留出了空间(比如,如果您有一个新的应用程序C,则需要调用a或B)
  • HTTP可用性:如果应用程序之间可以使用HTTP通信,那么Web服务是一种极好的集成方法
  • 开发人员知识:您/团队熟悉哪些技术

这些实际上是一些小提示,如果您希望进一步研究,我强烈建议您阅读这本书。

MQ和大多数/所有ESB都将被视为异步的……是的,但如果需要,您可以通过编程实现同步。您为什么要这样做而不是实际的同步传输?@Andres,您的意思是什么“没有看到HTTP服务"? 应用程序A无法打开应用程序B的80/8080/etc端口的客户端套接字?但在RMI的情况下,您将需要直接访问RMI端口。如果我有一个web容器,我肯定更喜欢JAX-RS而不是RMI。但是,MQ隐藏了所有客户端的物理位置。这是一个道具。但是……:)您必须管理一个额外的服务器。不确定我们为什么要谈论“轻量级ESB”,因为它们中的大多数都是通过消息传递构建的。所以,如果我想拥有灵活的系统拓扑,我选择JAX-RS进行直接同步调用,或者选择MQ:)@Andres,关于Spring。如果您已经有Tomcat/Jetty等来托管您的web应用程序,请查看