问题描述
我正在学习使用来自 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 (将#修改为@)