我目前有一些在基本消息类上传递自定义CorrelationId的sagas。所有事件和命令都从该基类继承,因此可以轻松访问CorrelationId。结果,ConfigureHowToFindSaga
映射看起来像这样:
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<MySagaData> mapper)
{
mapper.ConfigureMapping<MyCommand>(message => message.CorrelationId)
.ToSaga(sagaData => sagaData.CorrelationId);
mapper.ConfigureMapping<MyEvent>(message => message.CorrelationId)
.ToSaga(sagaData => sagaData.CorrelationId);
}
在saga的每个步骤(以及saga与之通信的其他服务)中,自定义的CorrelationId当前手动从消息映射到消息,如下所示:
public Task Handle(MyCommand message, IMessageHandlerContext context)
{
// do something
return context.Publish(new MyEvent { CorrelationId = message.CorrelationId });
}
我想知道是否可以使用NSBConversationId
消息头替换自定义的CorrelationId,因为我相信NSB已经自动将此消息从消息映射到消息。
我对此有两个疑问:
1.这听起来合理吗?
2.如果是,是否有一种简单的方法来设置ConfigureMapping
映射,以使传奇从context.MessageHeaders[Headers.ConversationId]
消息正文而不是直接从消息正文的属性读取?我意识到我可以编写一个自定义的SagaFinder来挖掘标题并获取ConversationId,然后使用它来查找传奇。但是,我认为如果我需要为每个传奇做这些,那么整个方法可能是错误的。谢谢
传奇地图属性的目的是从业务方面为传奇提供唯一的标识符,即银行交易,订单ID,索赔ID,或者另一个示例可能是贷款ID。因此中继技术标识符听起来像是您走错了方向...
您对这些英雄的故事是什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句