gpt4 book ai didi

java - 顺序数据的并行性和故障转移

转载 作者:行者123 更新时间:2023-12-02 05:02:02 25 4
gpt4 key购买 nike

大家好!

我们有一个非常简单的应用程序适配器:每 30 秒一次,它从一个系统的数据库中读取记录(无法写入),将每条记录转换为内部格式,执行过滤、浓缩、. ..,最后,将生成的实体(比方说)转换为 xml 格式,并通过 JMS 将它们发送到其他系统。没什么新鲜的。

让我们在这里添加一些趣味:数据库中的记录是顺序的(这意味着它们的标识是由序列生成的),并且何时读取新的一堆记录,我们得到一个最后处理的序列号——它存储在我们的内部数据库中,并在每次处理下一条记录时更新(发送到 JMS)——并开始从该记录读取(+1 )。

问题是我们的客户给了我们一个 NFR:读取记录束的处理时间不得超过 30 秒。由于工作流程中有很多步骤(其中一些运行时间相当长),并且有可能获得相当大量的记录,并且就我们逐条处理它们而言,可能需要超过30 秒。

由于以上所述,我想问两个问题:

1) 是否有一种并行处理顺序数据的方法,可能使用一个或多个中间存储,或者 Disruptor 模式,或者类似 cqrs,或者基于通知,或者......提供了工作的可能性在这样的系统中?

2) 通用的。我需要存储最后处理的号码并将实体发送到 JMS。如果我将一个数字保存到数据库,然后 JMS 出现一些问题,那么在应用程序重新启动时,我的适配器会认为它已成功发送实体,但事实并非如此,并且永远不会收到该实体。如果我发送一个实体,然后尝试将数字保存到数据库并收到异常,则在应用程序重新启动时将执行重新处理,这将导致 JMS 中出现重复。我不确定 xa 事务是否会在这里有所帮助或某种最后的资源策略......

有人可以分享经验或想法吗?

提前致谢!

最佳答案

1) 30 秒是一段很长的时间,你可以在这段时间内做很多事情,尤其是使用多个 CPU。如果没有具体细节,我只能说,如果您对其进行分析并使用更多 CPU,很可能可以使其速度更快。

2) 您可以在发送之前更新数据库,并亲自监听 JMS 队列以查看代理是否收到了它。

关于java - 顺序数据的并行性和故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28180186/

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