我只是在学习 Microsoft Orleans,我想知道如何最好地处理我们的场景之一。我们将有一个接收请求的 REST 服务,这最终会导致在外部系统中创建新记录。此记录将具有很长的 Id 值。然后我们将把这个 Id 返回给调用者。
这种情况的建议是什么?是否应该有一个无状态的grain来处理调用外部系统并获取Id。我认为这个“工厂”grain 将创建带有 id 的grain 并向该grain 提供初始信息(因此它不必从外部存储中检索数据)。但是,我不希望它在第一次激活时尝试从外部存储读取此信息。
是否有关于如何使用 Microsoft Orleans Cereal 处理此问题的建议?
最佳答案
这取决于您想对 Grain 中此记录的数据做什么。
但通常听起来你的服务应该调用一个普通的grain(不是无状态的workergrain)并使用long id值作为grain主键(没有“创建”grain这样的东西,你只需通过引用调用它并且会自动实例化)。
然后,grain 可以从外部存储读取数据,也可以显式传递该数据的某些部分。然后,如果您需要从内存中为有关此数据的 future 请求提供服务,您只需将它们定向到此 Grain,它就会为它们提供服务。如果此数据是可变的,那么grain 也可以定期(或根据某些外部消息)决定刷新/无效此数据。
关于actor - 奥尔良 key 和数据库记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39301977/