可靠的 Actor

Service Fabric 中的 actor 由標準 .NET 介面/類對定義:

public interface IMyActor : IActor
{
    Task<string> HelloWorld();
}

internal class MyActor : Actor, IMyActor
{
    public Task<string> HelloWorld()
    {
        return Task.FromResult("Hello world!");
    }
}

介面/類對中的每個方法都必須是非同步的,並且它們不能具有 out 或 ref 引數。

如果你考慮 Actor 模型,很容易理解為什麼:物件通過交換訊息相互互動。訊息通過非同步方法傳遞給 actor 類; 響應由 actor 執行時(actor容器)處理並路由回撥用者。

Service Fabric SDK 將在編譯時生成代理。這個代理由 actor 客戶端用來呼叫它的方法(即向 actor 傳送一條訊息,然後傳遞一個響應)。

客戶端通過 ID 識別 Actor。ID 可以是已知的(你從 DB,另一個 Actor 獲取它,或者可能是連結到該 actor 的 userID,或者是真實物件的序列號)。

如果你需要建立一個新的 actor 並且你只需要一個 ID,那麼(提供的)ActorId 類具有建立隨機分佈的 actor ID 的方法

ActorId actorId = ActorId.NewId();

然後,你可以使用 ActorProxy 類為 actor 建立代理物件。這不會啟用 actor 或呼叫任何方法。IMyActor myActor = ActorProxy.Create(actorId,new Uri(“fabric:/ MyApp / MyActorService”));

然後,你可以使用代理來呼叫 actor 上的方法。如果具有給定 ID 的 actor 不存在,它將被啟用(在叢集中的一個容器內建立),然後執行時將向 actor 釋出訊息,執行其方法呼叫並在 actor 時完成 Task 答案:

await myActor.HelloWorld();