
集成事件驱动型和
“
请求
–
响应
”
型微服务
|
177
13.5
在事件驱动的工作流中处理请求
“请求
–
响应”
API
构成了许多系统之间通信的基础,因此,你需要确保事件驱动型应用程
序能够集成来自此类请求的输入数据。其中一种请求处理方式与处理任何非事件驱动的系
统的方式一样:立即执行所请求的操作并将响应返回给客户端。或者,也可以将请求
转换
为事件,将其注入自己的事件流中,并像处理系统中的任何其他事件一样对其进行处理。
另外,微服务还可以混合执行这些操作,只将对业务重要的请求转换为事件(可以在界限
上下文之外共享),同时同步处理其他请求。图
13-10
展示了这一概念
,稍后将进一步展开
这个内容。
用户图形用户界面(GUI) 用户GUI
微服务
微服务
直接处理请求 将请求转换成事件
1) 创建对象
2) 直接在
数据库中
创建对象
2) 创建对
象事件
3) 发布对象
4) 物化流
1) 创建对象
对象流
图 13-10:直接处理请求与将请求转换成事件
上图的左半部分展示了传统的对象创建操作的执行过程,其结果被直接写入数据库中。上
图的右半部分展示了一个事件优先的解决方案,它将请求解析为事件并发布到对应的事件
流中,然后事件驱动的工作流会进行消费、应用业务逻辑并将其存储在数据库中。
先写入事件流的主要优点是其提供了一个永久的事件记录,并允许所有的服务去物化数
据。然而,其最大的折中是会产生延迟,服务必须等待结果物化到要使用的数据存储中
(“读写”最终一致性)。缓解此问题的一种方法是在成功地将值写入对象流之后将其保留
在内存中,这样就可以在用户端的操作中使用它。但是 ...