(本實例都是使用的Net的客戶端,使用C#編寫)

  在第二個教程中,我們學(xué)習(xí)了如何使用工作隊列在多個工作實例之間分配耗時的任務(wù)。

  但是,如果我們需要在遠程計算機上運行功能并等待結(jié)果怎么辦? 那是一個不同的故事。 此模式通常稱為遠程過程調(diào)用或RPC。

  在本教程中,我們將使用RabbitMQ構(gòu)建一個RPC系統(tǒng):一個客戶機和一個可擴展的RPC服務(wù)器。 由于我們沒有任何值得分發(fā)的耗時任務(wù),我們將創(chuàng)建一個返回斐波納契數(shù)字的虛擬RPC服務(wù)。

1、客戶端接口【Client Interface】

  為了說明如何使用RPC服務(wù),我們將創(chuàng)建一個簡單的客戶端類。 它將公開一個名為call的方法,該方法發(fā)送RPC請求并阻塞,直到接收到答案:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

var rpcClient = new RPCClient();

Console.WriteLine(" [x] Requesting fib(30)");var response = rpcClient.Call("30");
Console.WriteLine(" [.] Got '{0}'", response);

rpcClient.Close();

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)


   關(guān)于RPC的注釋

   雖然RPC是一個很常見的計算模式,但它經(jīng)常被批評。 當(dāng)系統(tǒng)出現(xiàn)問題的時候,程序員不知道函數(shù)調(diào)用是本地函數(shù)還是緩慢的RPC調(diào)用,這樣的混亂導(dǎo)致了系統(tǒng)的不可預(yù)測性,并增加了調(diào)試的復(fù)雜性。 濫用RPC可能導(dǎo)致代碼的可維護性很差,這樣的設(shè)計不但沒有簡化軟件,而且只會是系統(tǒng)更糟。

   銘記這一點,請考慮以下建議:

     確保顯而易見哪個函數(shù)調(diào)用是本地的,哪個是遠程的。
     記錄您的系統(tǒng)。 使組件之間的依賴關(guān)系清除。
     處理錯誤情況。 當(dāng)RPC服務(wù)器停機很長時間后,客戶端應(yīng)該如何反應(yīng)?

    當(dāng)有疑問避免RPC。 如果可以的話,您應(yīng)該使用異步管道 - 而不是類似RPC的阻塞,將異步推送到下一個計算階段。

2、回調(diào)隊列【Callback queue】
  
   一般來說RPC對RabbitMQ來說很容易。 客戶端發(fā)送