c# - MassTransit Saga:缺少一些事件来过渡阶段
问题描述
我正在开发 SAGA 状态可以在已确认或未决确认之间切换的交易订单。我发现有时如果我提交超过 10 个 ReplaceOrderAcknowledge 事件。有一个或两个
SAGA 状态可能不会按预期移动到“已确认”。虽然任务 MarkReplaceOrderAcknowledged 被调用并完成。但国家没有动静。或者有时没有消耗事件 ReplaceOrderAcknowledge 并使我的 SAGA 状态始终保持为“PendingAcknowledged”。
我正在使用大众运输 6.3.1。对这个mssing有什么建议吗?
Initially(
When(AlgoRequested)
.ThenAsync(SendMarketDataSubscriberAsync)
.TransitionTo(MarketDataSubscribed),
During(MarketDataSubscribed,
Ignore(AlgoRequested),
When(MarketDataChanged)
.Then(MarketDataChangedTask)
.TransitionTo(PendingAcknowledged));
During(Acknowledged,
When(MarketDataChanged)
.Then(MarketDataChangedTask)
When(MarketDataChanged, ShouldGrab)
.ThenAsync(HandleGrabAsync)
.TransitionTo(PendingAcknowledged),
When(MarketDataChanged, ExceedTickAwayPrice)
.ThenAsync(ExceedTickAwayPriceAsync)
When(MarketDataChanged, ShouldFloatNotGrab)
.ThenAsync(HandleFloatAsync)
.TransitionTo(PendingAcknowledged),
When(MarketDataChanged, context => context.Instance.CancelSubmitted)
.ThenAsync(HandleCancelRequestAsync))
During(PendingAcknowledged,
Ignore(AlgoRequested),
Ignore(MarketDataChanged),
When(FloatAwaken)
.Then(FloatAwakenTask)
.Then(context => Log.Information("{@AwakenDoNothing}", context.Instance)),
When(ReplaceOrderAcknowledge)
.ThenAsync(MarkReplaceOrderAcknowledge)
.Then(context => Log.Information("{@ReplaceOrderAcknowledge}", context.Instance))
.ThenAsync(SendMarketDataRequestedAsync)
.TransitionTo(Acknowledged),
,
添加功能 MarkReplaceOrderAcknowledge
private async Task MarkReplaceOrderAcknowledge(BehaviorContext<FGOrderDetailState, IAlgoReplaceAcknowledged> context)
{
if (context.Data.OrderDetail.MsgSequenceNumber > context.Instance.AlgoMsgSequenceNumber)
{
context.Instance.MarketDataUsed = false;
var algoAck = context.Data;
algoAck.CorrelationId = context.Instance.OriginalCorrelationId;
await _strategyBus.Publish<IAlgoReplaceAcknowledged>(algoAck);
}
}
解决方案
推荐阅读
- swift - 将 Xcode MVC 项目导出到 .framework 文件
- android - 阻止 Decimal EditText 获得对启动的关注
- sql - 触发器postgresql中的距离计算
- node.js - 将记录插入数据库,同时通知用户在 node.js 中插入或失败的记录数
- html - 下拉菜单出现问题,因为它没有出现在悬停时(只是一个 html-css 模板)
- php - PHP ssh2_exec() 不执行 iptables 命令
- python - Python 2.6.6 - 如何以表格形式打印具有对齐列的列表?
- entity-framework - .net core 2.1 同一数据库的多个 DbContext
- google-app-engine - gcloud app ssl 证书更新失败,PERMISSION_DENIED
- wordpress - 将 Visual Composer 迁移到 Thrive Architect