如何解决将 saga 的响应关联回请求者
我正在学习使用来自 Masstransit 的 automatonymous 及其一个很棒的框架。但是,我在使用 saga 实现请求/响应时遇到了一些问题。我的用例就像非常标准的订单流程。
一些代码:
我像这样向传奇发出请求:
private readonly IRequestClient<PayOrder> _payOrder;
var request = new PayOrder(id,paymentRequest);
var response = await _payOrder.GetResponse<OrderPayment,TransitionNotAllowed,OrderNotFound>(
request,cancellationToken);
然后在 saga 中的配置如下所示:
During(Created,When(Pay)
.Request(
CreateTransaction,ctx => ctx.Init<CreateTransaction>(new CreateTransaction
{
OrderId = ctx.Instance.CorrelationId,...
}))
.TransitionTo(CreateTransaction!.Pending)
During(CreateTransaction!.Pending,When(CreateTransaction.Completed)
.Then(OnTransactionCreated)
.TransitionTo(Paying)
.Respond(c => c.Instance.Payments.Last()),When(CreateTransaction.Faulted)
.TransitionTo(Created));
private void OnTransactionCreated(BehaviorContext<OrderSaga,TransactionCreated> context)
{
context.Instance.Payments.Add(new OrderPayment()
{
TransactionId = context.Data.Response.TransactionId
});
}
在两者之间还有一个消费者创建实际交易并成功返回。消费者响应被接收,CreateTransaction.Completed 被触发,saga 转换到 Paying。然而,响应永远不会在我的 requestclient 中结束。
也在输出日志中,我看到 OrderPayment 消息被发送到总线,但由于某种原因,我一直在 requestclient 中超时,所以不知何故响应没有与该客户端相关,我无法弄清楚为什么。
[20:51:24 DBG] Declare exchange: name: Core.Models:OrderPay
ment,type: fanout,durable
[20:51:24 DBG] SEND rabbitmq://localhost/Core.Models:OrderP
ayment db800000-358d-74d4-c2eb-08d91c896ee0 Core.Models.Ord
erPayment
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。