原文链接:https://logcorner.com/building-micro-services-through-event-driven-architecture-part14-query-api/
在本教程中,我将展示如何构建一个查询API,使用命令查询职责分离(CQRS)模式在微服务架构中实现查询。
读取模型的目标是构建一个专门用于读取的模型,通过对不同场景进行建模以将信息呈现给系统用户。
我无法查询事件流,因为它们不容易查询。出于性能原因,我也无法重建聚合的状态并在内存中查询它以获取用户的信息。
所以我将使用投影来创建事件的结构表示。这是通过预先计算聚合的当前状态并最终将其存储到no-sql数据库来完成的。我还可以根据最终用户的需要预先计算和存储信息以提高性能。
Streams已投影到ElasticSearch中,现在我必须构建视图以显示从无no-sql数据库中检索数据的查询。
投影读取模型
我创建了一个应该被所有视图继承的基类Entity,它包含聚合的版本和聚合的标识符。
SpeechView包含我希望为最终用户显示的字段。
Application
SpeechUseCase使用从elasticsearch中检索数据并返回SpeechView(或列表)的存储库
Infrastructure
Infrastructure使用ElasticSearch客户端和Nest来执行搜索请求。
Presentation
Presentation是一个web api coe程序,使用speechUseCase来搜索查询
测试
启动ElasticSearch
启动浏览器并连接到 http://localhost:5601
启动以下项目:
LogCorner.EduSync.Speech.Presentation
启动Postman并post新command
你应该会看到以下输出
代码源可在此处获得:
https://github.com/logcorner/LogCorner.EduSync.Speech.Query