Java Tomcat 负载平衡环境中的应用程序间通信

Java inter-application communication in Tomcat load-balanced environment

我有两个 Java 8 Web 应用程序部署在 Tomcat 7 中,需要进行通信。应用程序 A 有多个负载均衡的实例(多个 Tomcat worker,A1... An),应用程序 B 有一个实例。 A 目前可以通过 B 公开的 SOAP Web 服务,通过本地主机通过 HTTP 启动与 B 的通信。

B 现在需要启动与 A 的所有实例的通信。因为 A 是负载平衡的,B 不能使用 HTTP,因为 A1... An 都是通过相同的 URL 访问的,B 无法控制哪个实例将收到它的请求。

理想的解决方案可能类似于网络套接字连接 - A 的每个实例都会建立到 B 的持久连接,B 会将数据推送到每个 'subscriber'。

鉴于

是否有满足此要求的策略?

我知道 RMI 可用,但我不知道它是否支持我的要求。在 RMI 中,B 是否需要 A 的每个实例的先验知识,以及唯一标识它们的方法?是否可以通过 A 的每个实例建立双工连接以避免 B 需要 A 的任何知识?

答案是肯定的,RMI可以满足这个要求。应用程序A的每个实例都可以向应用程序B注册一个回调对象,应用程序B可以遍历所有注册的回调对象并依次通知。