0

Unique 属性でマークされた 1 つのプロパティを持つ saga データ クラスがあります。ただし、これは、NServiceBus がこのフィールドに同一の値を持つ複数のサガを作成することを妨げませんでした。

ここに私のデータクラスがあります:

public class ModuleAliveSagaData : ContainSagaData
{
    [Unique]
    public string ModuleId { get; set; }
    public string Endpoint { get; set; }
    public string Module { get; set; }
    public DateTime LastCheck { get; set; }
    public bool Warning { get; set; }
    public bool Error { get; set; }
}

マッピングは次のとおりです。

public override void ConfigureHowToFindSaga()
{
    ConfigureMapping<ModuleAliveMessage>(m => m.Id).ToSaga(s => s.ModuleId);
}

データが値を取得する方法は次のとおりです。

    public void Handle(ModuleStartedMessage message)
    {
        Log.InfoFormat("Module {0} started on {1} at {2}", message.ModuleName, message.Endpoint, message.Timestamp);
        Data.ModuleId = message.Id;
        Data.Endpoint = message.Endpoint;
        Data.Module = message.ModuleName;
        Data.LastCheck = DateTime.Now;
        Data.Warning = false;
        Bus.SendLocal(new SendNotification
        {
            Subject = string.Format("Module {0} is online at {1}", Data.Module, Data.Endpoint)
        });
        RequestTimeout<ModuleCheckTimeout>(TimeSpan.FromMinutes(5));
        Bus.Publish(new ModuleActivated
        {
            Endpoint = message.Endpoint,
            Module = message.ModuleName
        });
    }

そして、ここに、saga 永続化テーブル (Azure テーブル ストレージ) に表示されるものを示します。

このように機能すると思われますか、それとも何か不足している可能性がありますか?

ここに画像の説明を入力

4

1 に答える 1

0

イヴはコメントでこれを書いた、基本的にそれは適切な答えです:

Azure Storage は、パーティション キーと行キーのペア以外の一意性を確認できないため、その属性は無視されます。一意性が必要な場合は、別のストレージ技術を検討する必要があります。PS: これは、基盤となるストレージの既知の制限です: http://github.com/Particular/NServiceBus.Azure/issues/21

于 2015-03-14T11:50:13.863 に答える