命令ID与基础结构消息ID有何不同?

时间:2018-09-18 18:29:51

标签: events command microservices correlation cqrs

我正在考虑与CQRS有点联系的东西。有一个请求-应答模式。在HTTP传输到标头的示例中,我们至少放置了 Request-Id 以便进行跟踪。就我而言,监视不同的微服务之间。如果传入请求包含该请求,则将重写为 Correlation-Id 标头。我认为这是在传输层(基础结构)上完成的。问题是,是否应从业务层(例如直接从我们正在执行的命令中)直接从业务层传递Request-Id(有时称为Message-Id)-这种机制会自动地神奇地像ICommand一样要求存在ID? 还是仅存在于基础架构层(传输)中的东西完全不同?如果是,那么如何将传输ID与业务命令ID相关联?至少要同时放置两个标识符的日志/跟踪/跟踪内容吗?我错过了吗?此外,您认为CorrelationId应该在业务命令中出现什么?

1 个答案:

答案 0 :(得分:0)

IMHO概念(例如关联ID,因果关系ID,请求ID,消息ID等)属于基础结构层,因为它们不是业务规则的一部分。

但是,我已经在 Command Event 对象中添加了 metadata 属性以保存此类信息,这有助于我进行管理命令和事件之间的相关性和因果关系。

通过以关联数组(哈希映射,字典或任何键值格式)的形式具有此元数据属性,您可以将代码保持打开状态,以将所需的任何跟踪信息保留在未来而不会过多污染您的应用程序和域层。