簡體   English   中英

為什么我的Saga阻止對事件處理程序的訪問?

[英]Why is my Saga blocking access to the event handlers?

我正在嘗試在NServiceBus中進行傳奇。 我有以下幾點:

public class MyProcessor: Saga<MySaga>, IAmStartedByMessages<MyMessage1>,
    IAmStartedByMessages<MyMessage2>, IHandleTimeouts<MyTimeout>

protected override void ConfigureHowToFindSaga(SagaPropertyMapper<MySaga> mapper) {
    mapper.ConfigureMapping<MyMessage1>(m => m.Id).ToSaga(s => s.Id);
    mapper.ConfigureMapping<MyMessage2>(m => m.Id).ToSaga(s => s.Id);
}

public void Handle(MyMessage1 message) {
    // logic
    RequestTimeout<MyTimeout>(TimeSpan.FromMinutes(30));
}

public void Handle(MyMessage2 message) {
    // logic
    MarkAsComplete();
}

public void Timeout(MyTimeout state) {
    // logic
    MarkAsComplete();
}

因此,該體系結構使得Message1應該首先出現,但是在超時之后,我們放棄等待Message2 但是,如果Message2確實在超時后進入,則仍然可以,因此將這兩個消息都標記為IAmStartedByMessages 現在的問題是這樣的:如果我要發布Message2 ,那么代碼將運行,傳奇故事已經完成,並且我可以繼續發布更多事件。 但是,如果我首先運行Message1處理程序,它將阻塞整個處理器,那么我將無法再發布Message1Message2 發生這種阻塞的原因是什么?

我正在使用InMemoryPersistence進行開發。

問題是我沒有意識到需要在Handler設置與配置相關的Data 我認為這是由ConfigureHowToFindSaga自動處理的。 因此,在我的Message1處理程序中,我只需要以下代碼:

Data.Id = message.Id;

通過這種方式,創建了具有適當ID集的鼠尾草,然后下次我們訪問它時,它實際上就存在了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM