【问题标题】:NServiceBus saga Unique attributeNServiceBus 传奇独特的属性
【发布时间】:2015-03-14 19:50:13
【问题描述】:

我有一个传奇数据类,其中一个属性由 Unique 属性标记。但是,这并没有阻止 NServiceBus 在该字段中创建多个具有相同值的 saga。

这是我的数据类:

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 表存储)中看到的:

它是否应该像这样工作,或者我可能遗漏了什么?

【问题讨论】:

  • 你能在某处分享你的代码(或复制代码)吗?
  • 我在这里创建了一个存储库github.com/alexeyzimarev/SagaUniqueTest。它每 30 秒发送一条触发新 saga 的消息。所有这些消息的消息唯一属性值都是相同的,但是每次都会创建新的 saga。
  • Alexey,Azure 存储无法检查除了 partitionkey/rowkey 对之外的唯一性,因此该属性被忽略。如果您需要独特性,您将不得不考虑另一种存储技术。 PS:这是一个已知的底层存储限制:github.com/Particular/NServiceBus.Azure/issues/21
  • 感谢 Yves,当我考虑底层技术时,我开始怀疑这一点。我想尝试 RavenDb 订阅存储,但我们对应用程序本身使用 v3,这与嵌入在我们使用的 NServiceBus 4.7 中的 v2 客户端冲突。我设法为这个问题创建了一个解决方法,目前还可以。如果你创建了这个问题的答案,我会标记它,所以如果有人遇到这个问题,他们知道答案是什么:)

标签: nservicebus saga nservicebus-sagas


【解决方案1】:

Yves 在 cmets 中写了这个,基本上是正确的答案:

Azure 存储无法检查除 partitionkey/rowkey 对之外的唯一性,因此该属性被忽略。如果您需要独特性,您将不得不考虑另一种存储技术。 PS:这是一个已知的底层存储限制:http://github.com/Particular/NServiceBus.Azure/issues/21

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多