需要帮助,某种建筑建议......两个隔离系统之间同步的最佳方式是什么?
一个是标准的Java环境,另一个是没有j2ee集成且没有调度选项的遗留系统。 Legacy系统向Web公开了一个服务,所有处理都是通过客户端调用(java app)启动的。处理将以大约100个Web服务调用开始,完成时间太长,所以我不能在一个很长的线程中等待。
我正在考虑使用一种方法,客户端开始处理并公开另一个Web服务以等待遗留系统处理。遗留系统将通过将所需数据放入数据库(记录ID或类似内容)来提供信息。这将是另外100个调用,作为init调用的某种答案。这是合法的软件架构解决方案吗?
两个系统都在读/写同一个数据库。因此,是否需要2个web服务? Legacy系统没有预定启动的选项,因此我需要以某种方式启动它。
答案 0 :(得分:2)
目前还不清楚你拥有什么以及你需要什么。所以,让我猜一点。
1)旧系统获得100个请求,然后将它们作为批处理一起处理。新系统需要所有这100个答案才能继续创建新请求。基于这种假设,遗留系统不会回答每个单独请求的内容。因此,由于没有提供答案,新系统应该继续拍摄数百个新请求。但是,如果新系统在传统中未执行1-st时不应发出101请求,则需要同步。所以新的一个不应该等待,但不要开始101,直到它知道1-st完成。这应该是同步点 - 不等待101,但检查1-st是否完成。它可以在遗留系统或新系统中完成,但这是同步点。
答案 1 :(得分:1)
您对问题和解决方案的描述符合http://en.wikipedia.org/wiki/Reactor_pattern。这是一种非常常见的方法,非常适合。
答案 2 :(得分:1)
一些合理的问题: 1)在达到100(或任何幻数)并开始处理请求批处理后,新请求会发生什么?拒绝?排队等待新的“100”批次? 2)Soooo。批处理解析是异步的..您现在有两个选项: 选项A:在客户端公开一个Web服务,遗留系统将“联系”以“反弹”关于这100个细节的反馈 选项B:在旧服务器上公开Web服务,并且当前系统将每隔5分钟“ping”一次,只有在有等待反馈的详细说明时才会暂时获取反馈。 就个人而言,我更喜欢选项A,但请注意,在处理队列的异步详细说明时,您需要考虑多种情况。 例如。假设遗留系统暂时不可用或过载,新系统构建积压> 100(或任何幻数),您将不得不考虑处理积压队列的机制,为排队项目提供某种“偏好”/紧急程度。