官术网_书友最值得收藏!

2.3 Grain的標識方法

Orleans應用程序中的Grain實例對象與面向?qū)ο蟪绦颍∣OP)中的類實例對象有著許多相似之處,例如,它們實際都存在于應用服務器內(nèi)存區(qū)塊中,外部服務都需要通過對象的“引用”訪問其內(nèi)部數(shù)據(jù)及方法。

在.NET、Java等OOP語言中,當開發(fā)人員使用new關鍵字創(chuàng)建一個對象實例時,運行時所返回的引用對象值即指向內(nèi)存區(qū)塊中的對象實例,外部服務可使用該地址訪問對象實例。相比而言,在Orleans運行時內(nèi),由于每一個Grain實例都虛擬存在于Orleans運行時內(nèi),外部服務在對任意Grain實例進行訪問時并不需要顯式地創(chuàng)建模板Grain實例,而僅需通向Orleans運行時傳遞該Grain實例的邏輯標識,在Orleans運行時內(nèi)部對該標識進行解析并完成Grain實例的尋址過程,并在服務集群中確定該Grain實例的實際位置(服務節(jié)點位置)即可。在Orleans中該邏輯標識被稱為Grain ID,開發(fā)人員可以使用一個全局唯一標識符(GUID)、長整數(shù)或字符串作為Grain實例的邏輯標識。

Orleans運行時采用了一個名為UniqueKey的內(nèi)部類作為每個Grain實例的邏輯標識鍵:

當程序使用GUID進行Grain尋址時,N0及N1分別由GUID字節(jié)數(shù)組的0~7及8~15位生成;采用長整數(shù)尋址時,N1即為地址值,同時N0恒為0。而TypeCodeData的最低4字節(jié)標識了其所標識的對象類別,UniqueKey類型編碼的定義見表2-1。

表2-1 UniqueKey類型編碼定義

UniqueKey中的KeyExt字段存儲了用戶為Grain實例指定的擴展字符串,該字段將與N0、N1及TypeCodeData字段一起作為Grain實例的邏輯標識,而當用戶僅使用自定義字符串進行尋址時,UniqueKey中的N0及N1字段將被自動置為0。

開發(fā)人員可以通過指定Grain服務接口類型的基類接口來定義Grain服務類型的標識方式。

在以上示例中,Worker接口展示了5種采用不同標識方式的Grain類型定義,在對Worker Grain發(fā)起服務請求時,調(diào)用方需要向Orleans運行時傳遞相應格式的Grain ID對Grain實例進行尋址,如:

主站蜘蛛池模板: 呼图壁县| 庆元县| 大洼县| 黎川县| 巴彦淖尔市| 盈江县| 安丘市| 清原| 杭州市| 金门县| 和硕县| 岑溪市| 温宿县| 古田县| 舒城县| 古蔺县| 宜兰市| 中超| 广平县| 拉萨市| 南汇区| 潜山县| 廊坊市| 陇南市| 兰考县| 博野县| 孝义市| 聂荣县| 红原县| 皮山县| 安庆市| 阿拉尔市| 灵川县| 中卫市| 绥滨县| 都匀市| 正镶白旗| 香格里拉县| 托克托县| 黑水县| 平塘县|