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'。
鉴于
- A和B都是Java8个申请
- 两者都部署在同一个 Tomcat 安装中,并且
- 不要求非Java 应用程序与 B
通信
是否有满足此要求的策略?
我知道 RMI 可用,但我不知道它是否支持我的要求。在 RMI 中,B 是否需要 A 的每个实例的先验知识,以及唯一标识它们的方法?是否可以通过 A 的每个实例建立双工连接以避免 B 需要 A 的任何知识?
答案是肯定的,RMI可以满足这个要求。应用程序A的每个实例都可以向应用程序B注册一个回调对象,应用程序B可以遍历所有注册的回调对象并依次通知。
我有两个 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'。
鉴于
- A和B都是Java8个申请
- 两者都部署在同一个 Tomcat 安装中,并且
- 不要求非Java 应用程序与 B 通信
是否有满足此要求的策略?
我知道 RMI 可用,但我不知道它是否支持我的要求。在 RMI 中,B 是否需要 A 的每个实例的先验知识,以及唯一标识它们的方法?是否可以通过 A 的每个实例建立双工连接以避免 B 需要 A 的任何知识?
答案是肯定的,RMI可以满足这个要求。应用程序A的每个实例都可以向应用程序B注册一个回调对象,应用程序B可以遍历所有注册的回调对象并依次通知。