我是奥尔良的新手。我想知道如何在奥尔良使用谷物储存功能。我应该像消息队列一样使用它吗?它是否会临时存储我的状态并保持数据可用,即使它抛出异常或服务器崩溃。
谢谢!
Grain<T>
扩展类并使用属性注释的Grains 将[StorageProvider]
在您调用时将其当前状态写入指定的提供程序base.WriteStateAsync()
。
如果grain由于任何原因(包括服务器崩溃)被停用,那么在重新激活时,grain将使用上次保存的状态进行初始化。
我喜欢把它想象成一个缓存,而不是一个队列。希望对您有所帮助,并且就像之前的海报所说的那样,阅读文档,它很有用。
我写了几篇文章来指导您逐步习惯 Storage Provider API 并设置您的持久性存储:
基本上,Orleans 为您提供了一个非常简单的 API(图片取自上面的第一篇文章):
您的grain 将继承自Grain<T>
,T
您自己的类在哪里包含您要保留的状态。来自的State
属性Grain<T>
允许您访问它并读取/修改状态。其余的async
方法让您可以将更改保存到持久存储、读回或清除状态。您通常不需要读取状态;当谷物被激活时,它会自动完成。
不涉及消息队列。当您调用这三种方法之一时,它们将使用底层存储提供程序与您正在使用的任何数据库进行通信。这可能由于特定于存储的错误(例如死锁)或由于InconsistentStateException
乐观并发控制检查失败而导致失败。
无论您决定使用何种存储(例如 SQL Server、Azure 表存储、内存等),都必须通过 XML 配置或代码进行配置,并为其命名。然后这个名字被用在一个[StorageProvider]
跨越grain类的属性中;通过这种方式,grain 知道在进行持久性工作时要使用哪个存储提供程序(您的系统中可能有各种存储提供程序)。
关于如何完成所有这些的细节有点冗长(这就是我写关于这个主题的文章的原因)。您可以在我上面链接的文章或Grain Persistence文档中找到有关此的更多信息。