【发布时间】:2019-03-25 15:27:39
【问题描述】:
让我们假设有一个简单的用例(java/microservice/event sourcing/eventuate):
- 微服务 A 引入用户实体
- 微服务 B 引入了从我们的用户到某些外部用户存储(可能是 ldap 等)的同步
假设 B 出于某种技术原因无法更改用户名,但 A 本身允许更改用户名。
如何实现?在经典的巨石中,我们可能会围绕 java.beans.VetoableChangeSupport。在微服务中我遇到了麻烦。我的第一个想法是把它分成三个事件。
首先我们发布一个事件说“用户名将被更改”。每当微服务 B 不喜欢它时,第二个事件将是“取消用户名更改”。第三个事件将是“用户名更改成功”。
到目前为止,它会起作用。但是我们如何实现呢?我不喜欢有一个将所有微服务连接在一起的单体。我喜欢有一些“插件”的概念。只要我们不运行微服务 B,就没有人会否决,我们应该自动运行“用户名更改成功”。但是一旦我们运行微服务 B,我们就应该检查微服务 B 是否喜欢否决事件。
我们如何从“微服务 B 当前离线但很快会回来”中区分“微服务 B 未运行”?在第一种情况下,我们没有获得否决权。在第二种情况下,我们必须等待 B 再次回来检查未决的“用户名更改”事件。
【问题讨论】:
标签: event-sourcing