我正在研究在公共交通中使用传奇来协调跨多个服务的活动。传奇的生命周期很短 - 如果一切顺利的话不到 2 秒。
对于我的用例,我想使用请求/响应方法,即客户端请求命令,saga 处理该命令,在接收消息时经历一些状态更改,并最终响应启动 saga 的第一个命令,此时客户端会收到响应并可以显示 saga 的结果。
据我所知,此时上下文已不再知道初始请求。我如何回复以这种方式收到的消息?在处理第一个事件时,我可以坚持使用传奇数据,并用它来稍后回复吗?
谢谢阿列克谢。我意识到我可以将原始消息中的 ResponseAddress 和 RequestId 存储在传奇中,然后稍后构造一个 Send() 。
从原始请求中获取响应详细信息
MassTransit.EntityFrameworkIntegration.Saga.EntityFramework
SagaConsumeContext<TSagaData, TMessage> payload;
if (ctx.TryGetPayload(out payload))
{
ResponseAddress = payload.ResponseAddress;
RequestId = payload.RequestId ;
}
发送响应
var responseEndpoint = await ctx.GetSendEndpoint(responseAddress);
await responseEndpoint.Send(message, c => c.RequestId = requestId);
UPDATE: The 文档已更新以包含更完整的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)