2016-10-03 60 views
2

我發現很難找到有關使用StatelessWorkers的詳細文檔。Orleans StatelessWorkers

我想實現類似於this的操作。正如文件中所建議的那樣,我需要使用無狀態工作者來處理一些信息並激活將最終持有該州的穀物。

我想有一個調度程序穀物處理「初始化」的多個實例,因爲這顆穀物決不處理任何狀態,並且消息不需要按順序排隊。

我是否需要將此顆粒標記爲可重入?或者無狀態工作者(屬性)是否足夠?

關於激活,似乎我需要從IGrainWithIntegerKey(或類似的接口)繼承。這意味着我需要激活糧食如下:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>(0) 

因爲我總是使用0作爲ID將糧食的多個實例仍然被激活?或者我是否需要創建不同的ID。好像我不能把糧食如下:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>() 

即使我從IGrain

回答

7

簡答繼承

您可以創建繼承IGrainWithIntegerKey和使用密鑰0無國籍工人。

長的答案

無國籍人員是一樣的一對夫婦的區別正常穀類:

  1. 他們始終在本地激活(在同一個筒倉作爲調用者)。
  2. 如果建立對無狀態工作人員激活的調用,則可以創建多個激活。

它們受制於相同的停用語義。

這可能是令人驚訝的是無狀態的工人有鑰匙,但也有幾個原因鍵可能是有用的:

  1. 無國籍工人的激活可能有不同的「口味」,這可能與他們的關鍵。
  2. 更大的無國籍工作者可以通過使用一系列鍵來解決這些問題。

但是,如果這些功能對您無用,則約定將使用0的密鑰。

+0

感謝您的回覆,理查德。 「他們只能從一個筒倉裏面調用」這是否意味着我無法使用GrainClient激活無國籍工人?它是否有意義使其可重入?所以相同的穀物可以處理多個請求? – Jonny

+0

無國籍工人可以從其他穀物中調用,但不能直接從外部客戶端調用。 我會做一個糧食折返優化性能。我認爲沒有必要對無國籍工人這樣做。 –

3
  1. 他們只能從筒倉內調用。

StatelessWorker粒可以從客戶端調用。這實際上是一種流行的情況,當來自客戶的電話應該被預處理之後,才能將它們發送到其他穀物進行實際處理。

+0

其他流行的場景是執行純功能/無狀態操作以及自動擴展熱緩存項目。 – sbykov

相關問題