在公共交通状态机中使用 InMemoryOutbox,保留发布消息的顺序
UseInMemoryOutbox in Masstransit State Machine, Preserve Order of Publish Messages
我有一个配置有 UseInMemoryOutbox() 的 MT 状态机,因此只有在管道中的最后一步成功完成后,事件处理中的任何消息才会发布,在我的例子中是 state对 Couchbase 的坚持。
Initially(When(A).
ThenAsync(async context =>
{
context.Instance.IsAutoApprove = context.Data.IsAutoApprove;
IList<Task> publishTasks = context.Data.SomeList.Select(item =>
{
MessageA message = new MessageA
{
Content = "contentA"
};
return context.Publish(message);
}).ToList();
await Task.WhenAll(publishTasks);
}).TransitionTo(B));
WhenEnter(B, f => f.If(c => c.Instance.IsAutoApprove,
callback =>
callback.TransitionTo(C)
));
WhenEnter(C, c => c.Publish<SagaState, MessageC>(context =>
new MessageC
{
Content = "contentC"
}));
我注意到发布消息最终以不一致顺序发布。
例如 - 假设在第一个事件中 "SomeList" 中有两个项目,因此消息有时会按以下顺序发布:
MessageC
MessageA
MessageA
有时
MessageA
MessageA
MessageC
等等。
不保留逻辑流的顺序。
你能帮我解决这个问题吗?
我正在使用
地铁 3.5.2
MassTransit.Automatonymous 3.5.2
MassTransit.RabbitMQ 3.5.2
自动命名 3.5.11
绿管 1.0.9
谢谢,
这是出于性能原因而完成的,但实际上没有意义,所以我提交了一个问题并将其关闭。
https://github.com/MassTransit/MassTransit/issues/945
在 v4 中,动作将按顺序执行。
我有一个配置有 UseInMemoryOutbox() 的 MT 状态机,因此只有在管道中的最后一步成功完成后,事件处理中的任何消息才会发布,在我的例子中是 state对 Couchbase 的坚持。
Initially(When(A).
ThenAsync(async context =>
{
context.Instance.IsAutoApprove = context.Data.IsAutoApprove;
IList<Task> publishTasks = context.Data.SomeList.Select(item =>
{
MessageA message = new MessageA
{
Content = "contentA"
};
return context.Publish(message);
}).ToList();
await Task.WhenAll(publishTasks);
}).TransitionTo(B));
WhenEnter(B, f => f.If(c => c.Instance.IsAutoApprove,
callback =>
callback.TransitionTo(C)
));
WhenEnter(C, c => c.Publish<SagaState, MessageC>(context =>
new MessageC
{
Content = "contentC"
}));
我注意到发布消息最终以不一致顺序发布。
例如 - 假设在第一个事件中 "SomeList" 中有两个项目,因此消息有时会按以下顺序发布:
MessageC
MessageA
MessageA
有时
MessageA
MessageA
MessageC
等等。 不保留逻辑流的顺序。
你能帮我解决这个问题吗?
我正在使用
地铁 3.5.2
MassTransit.Automatonymous 3.5.2
MassTransit.RabbitMQ 3.5.2
自动命名 3.5.11
绿管 1.0.9
谢谢,
这是出于性能原因而完成的,但实际上没有意义,所以我提交了一个问题并将其关闭。
https://github.com/MassTransit/MassTransit/issues/945
在 v4 中,动作将按顺序执行。