- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我正在做一个 CQRS/ES 项目,在这个项目中,我们对如何处理在其他架构中很容易处理的琐碎问题有一些疑问
我的情况如下:
我有一个客户 CRUD REST API,每个客户都有唯一的文档(编号),所以当我注册一个新客户时,我必须验证是否有另一个客户使用该文档以避免重复,但是当涉及到 CQRS/ES 架构最终实现了一致性,我发现这种验证很难解决。
需要注意的是,我的问题不是跨微服务,而是在同一个微服务的命令应用和查询应用之间。
我们也在使用 eventstore .
我目前的解决方案:
所以我今天要做的是,在我的命令应用程序中,在保存 CustomerCreated 事件之前,我询问查询应用程序(使用 PostgreSQL)是否有该文档的客户,如果没有,我允许该事件继续进行。但这并不能保证 100%,对吧?因为我的查询可以去同步,所以我不能 100% 信任它。那是我的第二次验证开始的时候,当我的查询应用程序正在处理事件并将它们保存到我的 PostgreSQL 时,我再次检查该文档是否有客户,如果有,我拒绝该事件并发出一个补偿事件以撤消/cancel/inactivate 使用重复文档的客户,从而在 eventstore 上完成该客户流。
尽管这可行,但这里有两件事困扰着我,第一件事是我的命令应用程序依赖于查询应用程序,所以如果我的查询应用程序关闭,我的命令就会受到影响(今天,如果查询是,我只是在验证时返回 false下降但仍然......)第二件事是,查询/读取模型真的应该能够发出事件吗?如果是这样,正确的做法是什么?该命令是否应该为此提供某种 API?或者查询是否应该使用一些公共(public)共享库将事件直接发送到事件存储?如果我有多个 View /阅读?我应该选择哪一个来处理这个?
真的希望有人能阐明这些问题并帮助我解决这些问题。
最佳答案
作为引用,您可能需要查看 Greg Young 所写的关于 Set Validation 的内容。 .
I ask the query application (using PostgreSQL) if there is a customer with that document, and if not, I allow the event to go on. But that doesn't guarantee 100%, right?
That's when my second validation kicks in, when my query application is processing the events and saving them to my PostgreSQL, I check again if there is a customer with that document and if there is, I reject that event and emit a compensating event to undo/cancel/inactivate the customer with the duplicated document, therefore finishing that customer stream on eventstore.
as far as I know, eventstore doesn't have transactions across different streams
How should I send a command message to the write model? via API? via a message broker like Kafka?
关于events - CQRS/ES 架构上的补偿事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49451237/
我看到以下关于 MPEG 1 运动估计/补偿的解释,只是想知道它是否正确: 为什么我们不直接编码当前 block 和引用 block 之间的原始差异?因为残差的数字通常会小很多。例如,假设一个物体在图
计算机屏幕上像素的亮度通常与像素的数字 RGB 三元组值不线性相关。早期 CRT 的非线性响应需要补偿非线性编码,我们今天仍在继续使用此类编码。 通常我们在计算机屏幕上生成图像并在那里使用它们,所以一
我不知道它叫什么。状态栏?随着接待和电池生命周期的增加。但是有没有一种简单的方法可以判断它是否显示在应用程序中? 我正在编写一些通用代码,如果没有栏,我希望将某些内容放置在屏幕顶部,如果有,则在栏下方
观察下面的简单示例: div { border-bottom: 1px solid black; border-radius: 20%; padding: 10px; } Test 在 S
我有一个这样的嵌套视频: Live camera feed 当用户拍照时,图像沿y轴偏移 Captured Still image 我确实想要捕获整个图像并让用户上下滚动。他们目前可以这样做,但我希望
我从客户端收到了一个字体 (Calibre) 作为 OTF 文件,用于网络应用程序,但文件的“行高”(或者你怎么调用它?)有些奇怪。实际文本溢出顶部的 dom 元素并在下面留下一堆空间,导致各种丑陋。
我编写了一个数学计算器,它从用户那里接收一个字符串并对其进行解析。它使用 double 来保存计算时涉及的所有值。解决后,我将其打印出来,并使用 std::setprecision() 确保其输出正确
不同的 Android 设备具有不同的屏幕尺寸和屏幕密度。编写视频游戏时,补偿差异的好方法是什么? 最佳答案 我们先从 Android 的文档开始 Supporting Multiple Screen
我正在制作个人资料图片裁剪编辑器,它允许在区域内拖动、缩放和旋转图像。 图片的拖动是通过捕捉区域的mousedown和mousemove事件,计算区域内游标开始和停止的x/y坐标,得到游标移动的距离。
我正在尝试按地理区域对 AnyLogic GISRegions 集合进行排序。所述面积是使用GISRegion.area(units)计算的,这很简单。然而,我使用的区域是城市规模的,并且该方法返回一
首先,我希望这不是重复的。我读过很多类似的问题,但找不到与此特定问题相关的问题。 我有一个 javascript 日期选择器,它在内部使用 javascript 日期,这会产生意想不到的副作用。当我选
您可以在此处查看实时版本:http://steffiwilson.com/test . IE9 没有将内容 block 居中。 (我很确定旧版本的 IE 也不能正常工作,但我不能肯定地说。)我已经确保
我是一名优秀的程序员,十分优秀!