ale*_*dev 3 c# persistence nservicebus saga nservicebus-sagas
我在使用NServiceBus saga时遇到"乐观并发冲突"异常.
我的传奇涵盖了一个相对简单的流程:当任何消息到达时,它几乎没有外部请求,并在一段时间后收集回复.
下面你可以找到我的传奇的一个例子.
NServiceBus为此类流产生"乐观并发冲突"异常是否正常?
我应该考虑以某种方式重新设计传奇吗?
class MySaga: SqlSaga<SagaData>, ...
{
CorrelationPropertyName => nameof(SagaData.UserId);
public Task Handle(StartSagaMessage message, IMessageHandlerContext context)
{
// save a new item id
Data.Items.Add(message.ItemId);
// make an external request for the item title
context.Send<GetItemTitle>(message.ItemId);
// make an external request for the item description
context.Send<GetItemDescription>(message.ItemId);
// gather results after one hour
RequestTimeout<RequestTimeout>(TimeSpan.FromHours(1));
}
// this method sometimes raises "optimistic concurrency violation" exception
public Task Handle(GetItemTitleResponse message, IMessageHandlerContext context)
{
Data.ItemTitles[message.ItemId] = message.ItemTitle;
}
// this method sometimes raises "optimistic concurrency violation" exception
public Task Handle(GetItemDescriptionResponse message, IMessageHandlerContext context)
{
Data.ItemDescriptions[message.ItemId] = message.ItemDescription;
}
public Task Handle(RequestTimeout state, IMessageHandlerContext context)
{
context.Send<ProcessItems>(Data.Items, Data.ItemTitles, Data.ItemDescriptions);
MarkAsComplete();
}
}
Run Code Online (Sandbox Code Playgroud)
我在用: