【发布时间】:2019-03-20 23:49:34
【问题描述】:
我们有 2 个服务,让我们调用 S 和 G。S 有一系列步骤,比如 a,b,c,d,e,f,在步骤 d 调用服务 G。G 通常需要很多处理导致大量超时问题的调用的时间(跨越几分钟)。为了解决这个问题,我们计划使 G 的 API 异步。 G 有近 20 个需要异步的 API。我在设计这个时有 2 个问题:
使这些异步的理想方法是使用 SQS 或 SNS 主题并让 S 监听它们。但这是一个侵入性更改,需要对代码进行大量重构,在这种情况下拆分步骤 a、b、c、d、e、f。我们正在寻找快速的东西。因此,我们计划将请求 id 存储在某个键值存储中,并让 G 的 API 在基本健全性检查后返回成功,并在后台继续处理请求。一旦完成,结果就会在键值存储中更新,同时 G 会定期轮询存储。这看起来是正确的方法吗?
要使 G 的 API 异步,我们必须为所有 20 个 API 更改/编写大量代码。我正在考虑公开一个使用反射来识别在运行时调用哪个方法的单一 API。我知道与反射相关的问题,例如没有编译时错误检测、难以重构、性能较慢,并且由于我们在面向外部客户端的 API 中引入反射,因此对传递的方法名称进行完整性检查会遇到很多问题。唯一的优点是它使我的代码更干净,干扰最小。
我想知道解决上述问题的方法。
谢谢
【问题讨论】:
标签: java asynchronous reflection api-design