十 RPC 遠端過程呼叫

2022-09-02 21:36:20 字數 2153 閱讀 3638

相關概念

rpc,是remote procedure call的簡稱,即遠端過程呼叫。它是一種通過網路從遠端計算機上請求服務,而不需要了解底層網路的技術。rpc的主要功用是讓構建分布式計算更容易,在提供強大的遠端呼叫能力時不損失本地呼叫的語義簡潔性。

通俗點來說,假設有兩台伺服器a和b,乙個應用部署在a伺服器上,想要呼叫b伺服器上應用提供的函式或者方法,由於不在同乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料。

一般在rabbitmq中進行rpc是很簡單。客戶端傳送請求訊息,服務端回覆響應的訊息。為了接收響應的訊息,我們需要在請求訊息中傳送乙個**佇列,直接用預設佇列即可,如下面**:

string replyqueuename = channel.queuedeclare().getqueue();

amqp.basicproperties props = new amqp.basicproperties

.builder()

.correlationid(corrid)

.replyto(replyqueuename)

.build();

channel.basicpublish("", queuename, props, message.getbytes("utf-8"));

**中的basicproperties類,包含了14個屬性,這裡用到了兩個屬性:

rpc工作流程:

客戶端啟動時,建立了乙個匿名的**佇列。

在乙個rpc請求中,客戶端傳送乙個訊息,它有兩個屬性:

replyto:用來設定**佇列;

correlationid,對於每個請求都被設定唯一的關聯id。

請求被傳送到rpc_queue佇列.

rpc伺服器等待接收該佇列的請求。當收到乙個請求,它就會處理並把結果傳送給客戶端,使用的佇列是replyto欄位指定佇列。

客戶端等待接收**佇列中的資料。當接到乙個訊息,它會檢查它的correlationid屬性。如果它和設定的相匹配,就會把響應返回給應用程式。

客戶端**:

public class rpcclient 

} catch (ioexception | timeoutexception | interruptedexception e) finally catch (ioexception _ignore) }}

}public rpcclient() throws ioexception, timeoutexception

public string call(string message) throws ioexception, interruptedexception

}});

//從阻塞佇列中獲取資料

string result = response.take();

//獲取到資料後,取消訂閱

channel.basiccancel(ctag);

return result;

}public void close() throws ioexception

}

服務端**:

public class rpcserver  catch (runtimeexception e)  finally }}

};channel.basicconsume(rpc_queue_name, autoack, consumer);

// 等待接收來自rpc客戶端的訊息

while (true) catch (interruptedexception e) }}

} catch (ioexception | timeoutexception e) finally catch (ioexception _ignore) }}

}//斐波那契函式

private static int fib(int n)

if (n == 1)

return fib(n - 1) + fib(n - 2);}}

先執行服務端**等待客戶端訊息,在執行客戶端**,會在傳送訊息給服務端處理後再返回訊息。

上面**設計只是簡單的實現,具有的一些優勢:

還需要解決的更複雜的問題:

遠端過程呼叫 RPC

rpc是遠端過程呼叫 remote procedure call 的縮寫。就是一台伺服器上的服務通過引數傳遞的方式呼叫另一台服 務器的服務,並獲取返回結果。比如有兩台伺服器a b,a上的服務想要呼叫b上的函式或方法,由於不在同乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料...

RPC遠端過程呼叫

1.rpc 1.1 rpc remote procedure call 遠端過程呼叫.遠端過程指的是不是同乙個程序。1.2 rpc至少有兩個過程。呼叫方 client 被呼叫方 server 1.3 client主動發起請求,呼叫指定ip和port的server中的方法,把呼叫結果返回給client...

遠端過程呼叫RPC

1 可以夠跨多種開發工具及平台,比如說企業已有的系統開發完畢或者子系統已經部署交付了,它提供了rpc介面,新的子系統要整合,使用業界通用的rpc介面就可以整合了,你不可能要求原來的開發商再來修改一遍介面,否則的話就變成了資訊孤島。2 能夠跨多個伺服器,這個在其他計算機上很容易透過80埠的rpc來訪問...