【发布时间】:2016-12-02 23:10:38
【问题描述】:
设计
服务器代理不断轮询数据库 (SQL Server 2012) 以查找客户端代理所需的计划和/或配置是否有任何更改。客户端代理在网络上的所有机器上运行,需要从服务器代理获取更新的扫描计划和配置,并更新其作业计划程序。服务器代理和客户端代理都是用 Java 构建的。
问题陈述
一旦数据库更新,服务器将向 n 个客户端代理发送数据。
解决方案1
在服务器和客户端代理上创建 Web 服务并相互使用。每当数据库中的扫描计划/配置发生变化时,服务器将调用客户端代理的方法并更新配置文件。
缺点解决方案1
在可运行的 JAR 中,在所有客户端代理上部署 Axis2/Jetty/Similar webserver。考虑到这是在所有客户端代理上部署网络服务器,其数量可高达 150000,是否可取?另外,如果所有客户端机器上都有网络服务器,应用程序是否可以通过安全认证?
解决方案2
使用 RMI 在服务器和客户端之间进行通信。在这种情况下,客户端将继续轮询服务器,因为 RMI 通信是单向的。应该避免使用双向调用,因为这又涉及到在每台客户端机器上都有服务器套接字。
缺点解决方案2
每当数据库更新时,它不能直接向所有客户端机器发送消息。它必须等待客户端机器轮询它。如果需要立即扫描,所有客户端代理都需要经常轮询主代理。考虑到客户代理的数量可能很大,这是可取的吗? Java 架构师告知的另一个缺点是 RMI 比 webservice 慢。对吗?
我必须选择这两种解决方案中的任何一种,或者如果你们可以给我任何第三种解决方案。也有人建议将 JMS 作为广播方式。
【问题讨论】:
标签: java web-services client-server axis2 rmi