NServiceBusサガを使用しているときに競合状態に遭遇しています。NServicebusサガ競争条件
問題は、私は佐賀から派生するクラスを持っているthis-
で、IAmStartedByMessagesを実装し、SQL Serverでサガデータを永続化します。このサガは、着信メッセージを処理し、新しいメッセージを作成し、別のサーバーに送信します。このサーバーは、メッセージを処理し、応答を返します。この返信メッセージは、次の段階のサガ処理として処理されます。私はマッピングを設定するためにsaga idsを使用しています。
問題は、サガデータの直前の返信メッセージがデータベースに保存されたときに発生します。 サガデータが保存されていないため、マッピングは失敗し、メッセージは失われます。
次の例では、これらのハンドラが異なるエンドポイントでリッスンしているとしますが、SagaDataが保持される前にAnotherMessageを取得します。 -
public class MySaga : Saga<SagaData>,
IAmStartedByMessages<StartMesssage>
HandleMessage<AnotherMessage>
{
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<AnotherMessage>(s => s.Id, x => x.SagaId);
}
void Handle(StartMessage message)
{
var sendMsg = new SendMessage(){SagaId=this.Data.Id}
bus.Send(sendMsg)
}
void Handle(AnotherMessage message)
{
}
}
public class NextStage : IHandleMessages<SendMessage>
{
void Handle(SendMessage message)
{
var anotherMsg = new AnotherMessage() {SagaId=message.SagaId};
bus.Send(anotherMsg);
}
}
(ところで、私は佐賀データとバスの永続化するのでNServiceBus 2.xの(Apacheライセンス版)
よろしく、
イリアス
このproblの解決策は何ですか?そう?私はIsTransactionalをtrueに設定していますが、私はまだ同じ問題を経験しています。 – Castrohenge