我在使用NServiceBus傳奇時遇到了競賽狀況。NServicebus傳奇賽事條件
的問題是這個 -
我有一個從佐賀派生,實現IAmStartedByMessages並持續佐賀數據在SQL Server的類。這個傳奇處理傳入的消息,創建一個新的消息,並將其發送到另一個服務器。該服務器處理消息併發迴響應。這個答覆信息然後作爲傳奇處理的下一個階段處理。我正在使用傳奇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許可證版)
問候,
伊利亞斯
這個問題的解決方案是什麼他們嗎?我將IsTransactional設置爲true,但我仍然遇到同樣的問題。 – Castrohenge