我担心这个问题: 假设您已经存在一个微服务环境,并且您想启动一个提供新功能的新微服务。如果该微服务需要使用旧事件来提供其功能,那么应该如何处理?
假设您要启动需要消耗与用户相关的事件的推荐服务,它如何获得旧事件?
在基于事件源的体系结构上,您可以查询事件存储,但是通常情况下,ES是在事件流中组织的,很难跟踪所有存在的流以查询所有事件。
我的想法是保持一个最终一致的存储库,在该存储库中,我按照事件发生的顺序存储所有事件(我们将其称为事件历史)。启动一个新的MS,它将订阅感兴趣的主题并查询事件历史记录,直到某个时刻为止。 感觉就像我在复制不必要的数据,我在寻找更好的解决方案。
在此先感谢您的帮助!
答案 0 :(得分:1)
我认为查询事件存储是一种方法。任何事件存储 都应提供某种方法来读取所有事件,而与流无关。 (有些人也可能会“给我有关X型聚合的所有事件”……但至少应有一个“全部”选项。)
因此,我将启动新服务,并使其查询并订阅事件存储中的所有事件-处理您关心的事件,而忽略其他事件。您只需要在第一时间(或如果需要重建)拉动初始历史记录,之后就可以处理当前事件(因为新服务可以自己维护一些状态)。
使用单独的“事件历史记录”存储库只会使罐头工作有些困难-您仍然需要播种 回购协议,并再次遇到相同的问题。
如果您有全部只需要一组特定事件/数据类型的多个服务,那么最好有一个单独的“过滤器回购”来从存储中提取事件并保留只是必要的。然后,服务可以从预先过滤的数据中获取数据,而不是直接从存储中获取数据。但是,必须在每个系统的基础上考虑复杂性与性能之间的权衡!