繁体   English   中英

同步到异步 http 请求和响应架构

[英]Sync to Async http request and response architecture

我们正在开发一个REST 服务(2),它充当黑盒客户端(1) 和黑盒处理器微服务(4) 之间的适配器。

(2)和(4)使用Kafka相互通信(3)

所有组件都是无状态的(Kafka 除外,对吧?)

首先,客户端使用 http POST(同步)向REST 服务初始化一个命令,然后REST 服务接收此命令并通过Kafka (异步)将其转发给处理器 ms (在进行一些转换后)。 在此步骤之后, REST 服务将休眠(此 http 范围)并等待处理器 ms的结果

然后Processor ms处理这个命令并将结果通过Kafka (异步)发送回REST 服务 REST 服务唤醒,并在相同的 http scope 内将 ResponseEntity 返回给客户端

现在我们决定将 (2) 迁移到微服务以利用此架构。 问题出现了:(2)的实例1向(4)发送命令,(4)向实例2发送结果。但是(1)和实例1之间建立了http session,实例2无法返回( 1). 此返回必须由且仅由实例 1 完成。

例如,我的第一个想法是让实例 1 知道 (4) 的结果,无论它被发送到哪个实例。 但目前我们没有解决方案来存档这个想法。

这是图表图表

我们需要针对此架构的“非变通”解决方案。 请帮忙。 谢谢

注意:我们无法更改黑盒组件

这有点直截了当 - 简而言之:您需要确保只查找正确的事件。

这意味着发布在结果队列上的事件必须是可识别的,是针对该特定客户端而不是另一个客户端的。 例如,您可以通过包含一个 guid 来做到这一点。

随后,您的 REST 服务将继续寻找结果事件,但会丢弃它们,除非它们表明它们是针对他的特定客户的。

这是显示此原理的图表。 请注意,REST 服务仅查找“Client 1”事件:

概述 REST 服务和处理服务通过事件队列系统进行通信

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM