我很难将我的需求概念化为适合我们新生的 SOA/EDA 的东西
我们有一个组件,我将其称为数据下载器。这是具有高延迟和与每个请求相关的成本的外部数据提供者的外观。我想使用这个组件并通过明确的合同定义从中创建一个可重用的服务。由我决定该合同应如何运作,但其责任有两个:
- 为即将进行的预定下载维护参数列表(称为下载定义)
- 管理与外部服务通信的技术细节
基本上,它管理通信的“方式”。'what' 和 'when' 是另外两个组件的职责:
“什么”由负责确定下载参数的“客户”管理。
“何时”由专用调度组件管理。由于与下载相关的成本,我们希望在当天批量处理请求。
希望这个序列图能够解释服务的职责:
因为每个职责都分为三个不同的组件,所以我们会通过异步消息获得各种潜在的竞争条件。例如,当调度程序告诉下载程序完成它的工作时,因为“附加到下载定义”命令是异步的,所以不能保证来自客户端 A 的未决请求实际上已得到服务。但这一切对我来说都是高耦合的。为什么调度程序必须知道在调用下载之前需要执行的任何“先决条件”客户端请求?
我们尝试过的一些潜在解决方案:
使“附加到下载定义”命令成为阻塞请求/响应操作。但这会破坏性能。拥有 EDA 的可扩展性优势
在下载器中构建一些东西,以确保它仅在其传入请求队列中没有挂起的命令时运行。但这会引入对我也不喜欢的底层消息传递基础架构的依赖。
让我觉得我正在以一种完全落后的方式思考这个问题。或者这只是一个经典案例,有人试图将同步 RPC 需求融入异步事件驱动架构?