设计
服务器代理不断地轮询数据库(SQL Server 2012),以查找是否需要为客户端代理进行计划和/或配置更改。客户端代理在网络上的所有机器上运行,并需要从服务器代理获取更新的扫描计划和配置,然后更新其作业调度程序。服务器代理和客户端代理均采用Java构建。
问题陈述
一旦数据库更新,服务器就向n个客户端代理发送数据。
解决方案1
在服务器和客户端代理上创建Web服务并相互使用。每当数据库中的扫描计划/配置发生变化时,服务器将调用客户端代理方法并更新配置文件。
缺点:解决方案1
在可运行的JAR中,在所有客户端代理上部署Axis2/Jetty/类似的Web服务器。考虑到这是在所有客户端代理上部署Web服务器,其中数量可以达到150000,这是明智的吗?还有,如果所有客户端机器上都有Web服务器,应用程序是否能通过安全认证?
解决方案2
使用RMI在服务器和客户端之间进行通信。在这种情况下,客户端将不断轮询服务器,因为RMI通信是单向的。应该避免使用双向调用,因为这又涉及在每个客户端机器上设置服务器套接字。
缺点:解决方案2
每当数据库更新时,它不能直接发送消息到所有客户端机器上。它必须等待客户端机器进行轮询。在需要立即扫描的情况下,所有客户端代理都需要频繁轮询主代理。考虑到客户端代理的数量可能很大,这是否明智?另一位Java架构师提出的另一个缺点是,RMI比Web服务慢。这是正确的吗?
我必须选择这两种解决方案之一或者如果您能给我任何第三种解决方案,也可以。有人还建议JMS作为广播方式。