如何将多台机器的PATCH http请求同步到单台机器

问题描述 投票:0回答:1

我在2个不同的机器(例如A和B)上具有相同的驼色api,最后2个不同的机器(A和B)指向一个公共应用服务器,例如C,在此执行记录更新,在执行更新之前,有多个获取收集信息的方法来自通用应用程序服务器(C)。 (这是针对A和B的通用ID说10)

我处于必须同步来自A和B的请求的情况,或者一次只能处理一个请求,一旦完成,另一个就应该开始。

以下是我尝试过的内容:

机器A和B具有通用的数据库,因此我尝试将ID存储在请求A的db中,并检查是否存在相同的ID,以备B使用。一旦A完成,它的处理ID将从DB中删除,B检查,此时它不会获取ID,它将开始处理。

不幸的是,我尝试过的解决方案似乎还没有达到目标,如果您可以提出一些解决方案,那就太好了。

PS:我正在使用骆驼路线,在执行更新之前,这里执行了多个获取请求因此,我想在等待中发出1个请求,因为机器A和B不同,因此无法通过同步来实现。

目前没有可粘贴的代码

谢谢,

java java-ee routes apache-camel synchronization
1个回答
0
投票

您可以通过decoupling使用JMS队列进行更新操作中的数据收集来“同步”此方案。 A和B正在收集所需的数据,并最终将更新请求作为JMS消息生成到同一队列中。

C(或其他人)正在消耗消息,而只是针对C进行更新请求。

此异步解决方案意味着A和B不需要同步响应”用于更新请求。

从根本上改变错误处理。您必须在使用者方面处理更新错误。当A和B成功将更新请求丢弃到队列中时,它们将不再负责。如果以后发生错误,则不会到达它们。因此,如果数据不足以进行更新,则需要验证A和B上的数据,并拒绝请求。

另一方面,当C断开时,您可以在A和B上处理请求。只要经纪人可以删除消息,他们就不会在意。当C重新启动时,它可以处理排队的消息。

要在使用者方面严格同步,您只需使用仅1个使用者

如果使用支持message groups的JMS代理(例如ActiveMQ),您甚至可以调整此方案。假设您只需要同步具有相同ID的请求。在这种情况下,您将ID设置为JMSXGroupID。然后,您可以使用任意数量的使用者,并且代理应注意对同一ID的所有请求都由相同的使用者处理(因此是同步的)。

© www.soinside.com 2019 - 2024. All rights reserved.