同一 tomcat 服务器内 WAR 之间的通信 - JNDI 与 REST API

Gya*_*edi 5 java rest tomcat jndi

我有一个要求,前端应用程序(用 Spring MVC 编写)需要与另一个后端应用程序通信。这两个应用程序都将在同一个 tomcat 实例中运行 WAR。为了便于理解,我们将其命名为 frontend.war 和 backend.war。

我浏览了各个论坛上的许多帖子,发现了许多不同的策略,其中一些如下:

1)使用 EJB - 排除这种情况,EJB 是维护开销,我们没有计划创建专用的 EAR 来完成此任务;因为我们计划添加更多不同的 forntend wars(应用程序模块),它们将与相同的 backend.war 进行通信。

2)使用JNDI:看起来很有希望,但需要进行一场战争才能了解第二次战争所暴露的“接口”,即它的签名。因此,它使其彼此紧密耦合。未来服务合同的变更可能会成为噩梦。

3)使用 REST API:这看起来是一种理想的方法,只有一个警告是通过 HTTP 调用进行通信,因此可能会很慢。

其他方法如常见的parentContext(在Spring中)。应用程序内的上下文切换确实有其自身的问题。

我越来越倾向于使用 REST API 方法来实现此解决方案;因为它更清洁且易于维护。此外,http 协议已经成熟,并且拥有大量可用于未来开发的专业知识。

我的疑问: A)是否有可能让 Tomcat 知道特定的 Web 服务调用确实是对运行相同 JVM/服务器(某种“内部”)的应用程序的调用;而不是“外部”网络服务调用?

B)如果我使用像“ http://localhost:8080/rest/ ...”这样的url(请注意,backend.war不适用于外部世界,因此不需要域名);它会起作用吗?

我正在寻找一种方法,它可以为我提供 JNDI(同一 JVM 内的通信)的性能和 REST 的灵活性(只要公共 URL 完好无损,您就可以随时更改任何内容)。

Nim*_*sky 0

创建常用功能的 jar 文件,将它们打包为两个项目的依赖项 - 服务层!

或者,使用休息并坚持不同的 tomcat 实例/服务器 - 微服务!