我服務織物中創建的無狀態服務的特定副本。它有一個SingletonPartition,但有多個實例(InstanceCount在我的例子中是-1)。我怎樣才能達到一個無狀態的服務
我想使用此服務的特定副本通信。要找到所有副本的使用:
var fabricClient = new FabricClient();
var serviceUri = new Uri(SERVICENAME);
Partition partition = (await fabricClient.QueryManager.GetPartitionListAsync(serviceUri)).First();
foreach(Replica replica in await fabricClient.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id))
{
// communicate with this replica, but how to construct the proxy?
//var eventHandlerServiceClient = ServiceProxy.Create<IService>(new Uri(replica.ReplicaAddress));
}
的問題是,有沒有超載用於ServiceProxy創造一個副本。還有另一種與特定副本進行通信的方式嗎?
編輯
我們正在建設的方案如下。我們有不同的運動部件和計數器信息:1個命名分區有狀態服務(有幾百個分區),1個int64分區有狀態服務和1個有狀態的角色。要彙總計數器信息,我們需要聯繫所有服務分區和角色實例。
我們當然可以扭轉這種局面,讓大家都送有計數單(分區)的服務。但是這會在正常流量中增加一個網絡呼叫(因此會增加開銷)。
相反,我們提出了以下幾點。提到的服務&演員被組合成一個可執行文件和一個servicemanifest。因此他們在同一個過程中。我們使用instancecount -1向所提到的服務& actors添加無狀態服務。所有計數器信息存儲在一個靜態變量中。無狀態服務可以讀取此計數器信息。 現在,我們只需要接觸到無狀態服務(它具有節點數量的上限)。
好的,返回實例的API被稱爲GetReplicaListAsync,這是混淆來自的地方。我們用你最後的建議去了:我們使用HTTP通信。我編輯了我的問題來描述我們正在構建的場景。 –
@Vaclav Turecek如果我想在我的無狀態服務中公開WebSockets端點,該怎麼辦?那麼這些實例就不一樣了,因爲我可以有更多或更少的連接到它們中的每一個。然後,我可能想推動更新從演員到無狀態服務,所以數據通過WebSockets路由到客戶端 – Helikaon
我想我可以使用Actor事件和無狀態web api可以訂閱他們 – Helikaon