java - Cqrs+微服务架构: how to get data from another service

标签 java node.js microservices cqrs

我正在为个人项目设置微服务/cqrs 架构,但在“标准”设置中有一点我不明白。

按照标准设置,我的意思是

https://www.ibm.com/developerworks/cloud/library/cl-build-app-using-microservices-and-cqrs-trs/index.html

假设我有一个订单服务和一个提货点服务,并且我有一个类似“发送订单摘要电子邮件”的命令。

订单服务应如何获取发送电子邮件所需的有关取货点的数据(例如营业时间等)?我看到了 4 种可能性,但肯定还有其他可能性。

  1. 命令直接转到订单服务,然后订单服务查询取货点服务以获取数据。

  2. 命令转到取货点服务,然后取货点服务为订单服务发布一个新事件,并附加所需的信息。

  3. 该命令直接转到订单服务,然后订单服务查询面向客户端的只读数据库。

  4. 合并 2 个服务...鉴于它们没有其他共享上下文,这将是一个遗憾...

谢谢!

最佳答案

how to get data from another service

这有两个用例。在您的具体情况下,您所描述的内容有点类似于 UI Composition ;您正在创建一个从两个不同源提取数据的 View 。

关键点#1:您正在编写的数据已经过时——当电子邮件到达目的地时,服务所理解的真相可能已经发生了变化。因此,要求本身就具有一定的时间灵活性。

关键点#2:在发送电子邮件时,您根本没有更改任一服务的状态。您只是复制了其中的一部分。读取次数为safe操作。

关键点#3:实际发送电子邮件改变了“现实世界”,而不是服务;这是一项可以与服务工作同时执行的 Activity 。

因此,通常情况下,您的读取模型之一(可能是订单服务的模型)将支持列出将为其发送电子邮件的订单的查询。某些在服务外部运行的进程将定期查询该服务以查找待处理的电子邮件,查询所需的读取模型来撰写消息、发送消息,最后将消息发布到订单服务的输入队列以共享订单服务的信息。消息已成功发送。订单服务会看到这一点,并且读取模型会更新以指示消息已经发送。

关于java - Cqrs+微服务架构: how to get data from another service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45255905/

相关文章:

Java8 : "Translate" old ForEach Method into Lambda/Stream

javascript - 如何在我的 React 应用程序上使用 axios put 请求更新状态? ( react /Node express )

c# - MVC 上的 IdentityServer : What is Audience refering in AddJwtBearer

javascript - Koa.js中的route()不是一个函数

javascript - Mongoose 喜欢 SQL 与最新日期不同

java - Cassandra - 用于选择和更新的分布式行锁定

java - 公开 jhipster 微服务客户端类

java - 将 Java 帮助系统与 Windows 应用程序集成

java - 获取对象在 Java 列表中的索引

java - 如何防止 Jetty 中列出目录?