【问题标题】:How should I use a storage provider with Orleans我应该如何在奥尔良使用存储提供程序
【发布时间】:2017-12-30 19:21:47
【问题描述】:

我是奥尔良的新手。我想知道如何在奥尔良使用谷物储存功能。我应该像消息队列一样使用它吗?它是否临时存储我的状态 并保持数据可用,即使它抛出异常或 服务器崩溃了。

谢谢!

【问题讨论】:

标签: storage orleans


【解决方案1】:

扩展Grain<T> 类并使用[StorageProvider] 属性注释的Grain 将在您调用base.WriteStateAsync() 时将其当前状态写入指定的提供程序。

如果grain由于任何原因(包括服务器崩溃)被停用,那么在重新激活时grain将被初始化为上次保存的状态。

我喜欢将其视为缓存,而不是队列。希望对您有所帮助,并且就像之前的海报所说的那样,阅读文档,它很有用。

【讨论】:

    【解决方案2】:

    我写了几篇文章来指导您逐步习惯 Storage Provider API 并设置您的持久性存储:

    基本上,Orleans 为您提供了一个非常简单的 API(图片取自上面的第一篇文章):

    您的grain 将继承自Grain<T>,其中T 是您自己的类,其中包含您想要保持的状态。 Grain<T> 中的 State 属性允许您访问它并读取/修改状态。其余的async 方法允许您将更改保存到持久性存储、读回它们或清除状态。您通常不需要读取状态;当grain被激活时它会自动完成。

    不涉及消息队列。当您调用这三种方法之一时,它们将使用底层存储提供程序与您正在使用的任何数据库进行通信。这可能由于特定于存储的错误(例如死锁)或由于乐观并发控制检查失败导致的 InconsistentStateException 而失败。

    无论您决定使用何种存储(例如 SQL Server、Azure 表存储、内存等),都必须通过 XML 配置或代码进行配置,并为其命名。然后这个名字被用在一个通过grain类的[StorageProvider]属性中;通过这种方式,grain 知道在进行持久性工作时要使用哪个存储提供程序(您的系统中可以有各种存储提供程序)。

    如何完成这一切的细节有点冗长,在这里包含(这就是我写关于这个主题的文章的原因)。您可以在我上面链接的文章或Grain Persistence 文档中找到有关此的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多