共用方式為


ZooKeeperBasedMembershipTable 類別

定義

使用 Apache Zookeeper 3.4.6 的成員資格資料表實作 https://zookeeper.apache.org/doc/r3.4.6/

public class ZooKeeperBasedMembershipTable : Orleans.IMembershipTable
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
Public Class ZooKeeperBasedMembershipTable
Implements IMembershipTable
繼承
ZooKeeperBasedMembershipTable
實作

備註

所使用 ZK 功能的簡短概觀:資料是由節點樹狀結構表示, (類似檔案系統) 。 每個節點都會由路徑定址,而且可以保存資料做為位元組陣列,並具有版本。 建立節點時,其版本為 0。 更新時,版本會以不可部分完成的方式遞增。 更新也可以有條件于預期的目前版本。 交易可以保存數個作業,這些作業會以不可部分完成的方式成功或失敗。 建立 zookeeper 用戶端時,可以設定所有作業相對的基底路徑。

在此實作中:每個接收器部署都有一個節點 /UniqueDeploymentId 每個定址接收器的狀態都會儲存在 /UniqueDeploymentId/IP:Port@Gen每個定址接收器的 IAmAlive 會儲存在 /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive 中,因為其更新是無條件的。

節點的 ZK 版本是其 ETag:資料表版本是 /UniqueDeploymentId 的版本,定址接收器專案版本是 /UniqueDeploymentId/IP:Port@Gen

建構函式

ZooKeeperBasedMembershipTable(ILogger<ZooKeeperBasedMembershipTable>, IOptions<ZooKeeperClusteringSiloOptions>, IOptions<ClusterOptions>)

使用 Apache Zookeeper 3.4.6 的成員資格資料表實作 https://zookeeper.apache.org/doc/r3.4.6/

方法

CleanupDefunctSiloEntries(DateTimeOffset)

使用 Apache Zookeeper 3.4.6 的成員資格資料表實作 https://zookeeper.apache.org/doc/r3.4.6/

DeleteMembershipTableEntries(String)

刪除指定 clusterId 的所有資料表專案

InitializeMembershipTable(Boolean)

初始化 ZooKeeper 型成員資格資料表。

InsertRow(MembershipEntry, TableVersion)

不可部分完成地嘗試插入 (新增) 一個定址接收器的新 MembershipEntry,也會更新 TableVersion。 如果作業成功,則會對資料表進行下列變更:

  1. 新的 MembershipEntry 將會新增至資料表。
  2. 新新增的 MembershipEntry 也會隨著新的唯一自動產生的 eTag 一起新增。
  3. 資料表中的 TableVersion.Version 將會更新為新的 TableVersion.Version。
  4. 資料表中的 TableVersion etag 將會更新為新的唯一自動產生的 eTag。 資料表的所有變更、插入新的資料列,以及資料表版本和相關 Etag 的更新、應該以不可部分完成的方式發生,或以不可部分完成的方式失敗,而沒有任何副作用。 作業應該會在下列每一個狀況中失敗:
  5. 指定定址接收器的 MembershipEntry 已存在於資料表中
  6. TableVersion 的更新失敗,因為 TableVersion.VersionEtag 屬性所指定的指定 TableVersion etag () 不符合資料表中的 TableVersion etag。
ReadAll()

以不可部分完成的方式讀取成員資格資料表的完整內容。 傳回的 MembershipTableData 包含資料表中所有定址接收器的所有 MembershipEntry 專案,以及此資料表的 TableVersion。 MembershipEntries 和 TableVersion 必須以不可部分完成的方式讀取。

ReadRow(SiloAddress)

以不可部分完成的方式讀取指定定址接收器的成員資格資料表資訊。 傳回的 MembershipTableData 包含指定定址接收器的一個 MembershipEntry 專案,以及此資料表的 TableVersion。 MembershipEntry 和 TableVersion 必須以不可部分完成的方式讀取。

UpdateIAmAlive(MembershipEntry)

更新這個定址接收器之 MembershipEntry 的 IAmAlive 部分 (資料行) 。 這項作業應該只會更新 IAmAlive 資料行,而不會變更其他資料行。 這項作業是「已變更的寫入」或「就地更新」,且執行時不會進行 etag 驗證。 關於 eTags 更新:這項作業可能會自動更新與指定定址接收器資料列相關聯的 eTag,但不需要。 它也可以讓 etag 不會變更, (「中途寫入」) 。 關於 TableVersion:此作業不應該變更資料表的 TableVersion。 它應該維持不變。 沒有任何案例會因為資料表語意原因而失敗。 它只能因為網路問題或資料表無法使用而失敗。

UpdateRow(MembershipEntry, String, TableVersion)

不可部分完成地嘗試更新一個定址接收器的 MembershipEntry,也會更新 TableVersion。 如果作業成功,則會對資料表進行下列變更:

  1. 這個定址接收器的 MembershipEntry 將會更新為新的 MembershipEntry (舊專案將會完全取代為新的專案)
  2. 已更新 MembershipEntry 的 eTag 也會是具有新唯一自動產生 eTag 的 eTag。
  3. 資料表中的 TableVersion.Version 將會更新為新的 TableVersion.Version。
  4. 資料表中的 TableVersion etag 將會更新為新的唯一自動產生的 eTag。 資料表的所有變更、更新新的資料列,以及資料表版本和相關 etag 的更新、應該以不可部分完成的方式發生,或以不可部分完成的方式失敗,而沒有任何副作用。 作業應該會在下列每一個狀況中失敗:
  5. 指定定址接收器的 MembershipEntry 不存在於資料表中
  6. 指定定址接收器的 MembershipEntry 存在於資料表中,但其資料表中的 etag 與提供的 etag 不符。
  7. TableVersion 的更新失敗,因為 TableVersion.VersionEtag 屬性所指定的指定 TableVersion etag () 不符合資料表中的 TableVersion etag。

適用於