RPC系統結構: +----------+ +----------+ | Consumer | <=> | Provider | +----------+ +----------+ Consumer調用的Provider提供的服務。 Message Queue系統結構: +--------+ +-------+ +----------+ | Sender | <=> | Queue | <=> | Receiver | +--------+ +-------+ +----------+ Sender發送消息給Queue;Receiver從Queue拿到消息來處理。
在架構上,RPC和Message的差別點是,Message有一箇中間結點Message Queue,能夠把消息存儲。編程
因此對於有同步返回需求,用Message Queue則變得麻煩了。架構
若是以異步RPC的方式使用,Consumer(Client)線程消耗能夠去掉。但不能作到像消息同樣暫存消息/請求,壓力會直接傳導到服務Provider。異步
隨着業務增加,有的處理端處理量會成爲瓶頸,會進行同步調用到異步消息的改造。ide
這樣的改造實際上有調整業務的使用方式。ui
好比原來一個操做頁面提交後就下一個頁面會看處處理結果;改造後異步消息後,下一個頁面就會變成「操做已提交,完成後會獲得通知」。.net
RPC同步調用使用Message Queue來傳輸調用信息。 上面分析能夠知道,這樣的作法,發送端是在等待,同時佔用一箇中間點的資源。變得複雜了,但沒有對等的收益。線程
對於返回值是void的調用,能夠這樣作,由於實際上這個調用業務上每每不須要同步獲得處理結果的,只要保證會處理便可。(RPC的方式能夠保證調用返回即處理完成,使用消息方式後這一點不能保證了。)設計
返回值是void的調用,使用消息,效果上是把消息的使用方式Wrap成了服務調用(服務調用使用方式成簡單,基於業務接口)。code
RPC和MQ各自適合的應用場景blog