我们目前开始将事件从一个中央应用程序广播到其他可能感兴趣的消费者应用程序,并且我们的团队成员对 有不同的选择。我们应该在我们发布的消息中投入多少 .
总体思路/架构如下:
基于 Enterprise Integration Patterns我们正在尝试为我们发布的消息定义规范格式,并且在两种方法之间犹豫不决:
你会推荐一种方法吗?
我们应该考虑另一种方法吗?
最佳答案
Is there another approach we should consider ?
您也可以考虑不要将信息泄露到充当 technical authority 的服务之外。对于那部分业务
这大致意味着您的事件带有标识符,以便相关方可以知道感兴趣的实体已更改,并且可以查询权限以更新状态。
for each event published by the Domain Model, generate a message that contains a full snapshot of the Aggregate Root at that point in time
这也有额外的骗子对聚合表示的任何更改也意味着对作为 API 一部分的消息模式的更改。因此,聚合的内部更改开始跨越您的服务边界。如果您正在实现的聚合对您的业务具有竞争优势,那么您可能希望能够快速适应;涟漪增加了摩擦,会减慢你改变的能力。
what if consumer state and producer state get out of sync ?
据我所知,这个问题表明存在设计错误。如果消费者需要状态,也就是说从聚合历史构建的 View ,那么它应该从生产者那里获取该 View ,而不是尝试从观察到的消息集合中组装它。
也就是说,如果你需要状态,你需要历史(完整的,有序的)。一个事件真正告诉你的是历史已经改变,你可以驱逐你以前缓存的历史。
同样,对变化的响应能力:如果你改变了生产者的实现,而消费者也试图拼凑他们自己的历史副本,那么你的变化就会跨越服务边界。
关于rabbitmq - 消息类型 : how much information should messages contain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601398/