gpt4 book ai didi

java - 如何确保 RMI 操作的原子性?

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:17 26 4
gpt4 key购买 nike

我想使用 RMI 更新文件。我如何确保操作状态。

客户端连接到服务器并调用一个方法。紧接着,客户端和服务器之间的连接断开,客户端得到一个RemoteException,但是被调用的方法继续工作并更改一个文件然后返回并得到异常(假设它会在写入响应到套接字时意识到连接丢失) .

最佳答案

这在实践中是相当复杂的。您需要实现两阶段提交协议(protocol),客户端可以获得服务器可以保证提交的指示器,然后命令提交。

有一个现成的协议(protocol)叫做 XA用于管理这个过程,这由 Java Transaction API 支持.基本上你可以构建一个 XA compatible resource manager为您的文件。

这不是一项微不足道的任务,但如果您不介意在您的基础架构中包含应用程序服务器或事务管理器,这也并非超出可能性范围。这种方法的优点是您可以连接到成熟的、经过调试的事务管理基础设施。

几个替代方案是:

  • 实现您自己的两阶段提交协议(protocol),或

  • 构建文件更新代码,使其具有幂等性(多次调用进行同一更新只会进行该更新)。在这种情况下,您可以重试更新,直到您的客户端从服务器获得成功指示。

    请注意,您还必须提出用于锁定和/或管理冲突更新的协议(protocol)在同一条记录上,除非您可以保证来自客户端的顺序写入。根据您的应用程序,这可能是一个乐观的并发协议(protocol),但您仍然必须在操作它时锁定您正在处理的范围以使写入原子化。

关于java - 如何确保 RMI 操作的原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8727586/

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