gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:33:33 24 4
gpt4 key购买 nike

我在两台不同的机器(例如A和B)上有相同的camel Rest api,最后这两台不同的机器(A和B)指向一个公共(public)应用程序服务器(例如C),其中执行记录更新,在执行更新之前有多种get方法来收集信息来自公共(public)应用程序服务器 (C)。 (这是 A 和 B 的通用 ID,例如 10)

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

以下是我尝试过的:

机器A和B有共同的数据库,所以我尝试将请求A的ID存储在数据库中,并检查是否存在相同的ID,在B的情况下它应该等待。一旦A完成,它的处理ID就会从数据库和B中删除此时将检查它不会获取 ID,并将启动其进程。

不幸的是,我尝试过的解决方案似乎并不符合标准,如果您能提出一些解决方案,那就太好了。

PS:我使用 Camel 路线,在执行更新之前执行多个获取请求所以我想在等待中发出1个请求,这是无法通过同步实现的,因为机器A和B是不同的。

目前没有这样的代码可供粘贴

谢谢

最佳答案

您可以通过使用 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 的所有请求都由同一消费者处理(因此是同步的)。

关于java - 如何将多台机器的PATCH http请求同步到单台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com