一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 分析JAVA中幾種常用的RPC框架

分析JAVA中幾種常用的RPC框架

2021-04-12 09:14孜孜以求 JAVA教程

這篇文章主要介紹了JAVA中幾種常用的RPC框架的相關知識點,對此有興趣的朋友參考學習下吧。

rpc是遠程過程調用的簡稱,廣泛應用在大規模分布式應用中,作用是有助于系統的垂直拆分,使系統更易拓展。java中的rpc框架比較多,各有特色,廣泛使用的有rmi、hessian、dubbo等。rpc還有一個特點就是能夠跨語言,本文只以java語言里的rpc為例。

對于rpc有一個邏輯關系圖,以rmi為例:

分析JAVA中幾種常用的RPC框架

其他的框架結構也類似,區別在于對象的序列化方法,傳輸對象的通訊協議,以及注冊中心的管理與failover設計(利用zookeeper)。

客戶端和服務端可以運行在不同的jvm中,client只需要引入接口,接口的實現以及運行時需要的數據都在server端,rpc的主要依賴技術是序列化、反序列化和傳輸協議,java里對應的就是對象的序列化、反序列化以及序列化后數據的傳輸。rmi的序列化和反序列化是java自帶的,hessian里的序列化和反序列化是私有的,傳輸協議則是http,dubbo的序列化可以多種選擇,一般使用hessian的序列化協議,傳輸則是tcp協議,使用了高性能的nio框架netty。對于序列化,我還了解一些,像google的probuffer、jboss marshalling和apache thrift等,之前有寫一篇介紹probuffer的博文

1、rmi(遠程方法調用)

java自帶的遠程方法調用工具,不過有一定的局限性,畢竟是java語言最開始時的設計,后來很多框架的原理都基于rmi,rmi的使用如下:

對外接口

?
1
2
3
4
5
public interface iservice extends remote {
 
  public string queryname(string no) throws remoteexception;
 
}</span>

服務實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.rmi.remoteexception;
import java.rmi.server.unicastremoteobject;
 
// 服務實現
public class serviceimpl extends unicastremoteobject implements iservice {
 
  /**
   */
  private static final long serialversionuid = 682805210518738166l;
 
  /**
   * @throws remoteexception
   */
  protected serviceimpl() throws remoteexception {
    super();
  }
 
  /* (non-javadoc)
   * @see com.suning.ebuy.wd.web.iservice#queryname(java.lang.string)
   */
  @override
  public string queryname(string no) throws remoteexception {
    // 方法的具體實現
    system.out.println("hello" + no);
    return string.valueof(system.currenttimemillis());
  }
   
}

rmi客戶端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.rmi.remoteexception;
import java.rmi.registry.locateregistry;
import java.rmi.registry.registry;
 
// rmi服務端
public class server {
 
  public static void main(string[] args) {
    // 注冊管理器
    registry registry = null;
    try {
      // 創建一個服務注冊管理器
      registry = locateregistry.createregistry(8088);
 
    } catch (remoteexception e) {
       
    }
    try {
      // 創建一個服務
      serviceimpl server = new serviceimpl();
      // 將服務綁定命名
      registry.rebind("vince", server);
       
      system.out.println("bind server");
    } catch (remoteexception e) {
       
    }
  }
}

服務注冊管理器寫在了server里,當然也可以抽出來單獨作為一個服務,在其他一些框架中,往往用zookeeper充當注冊管理角色。

2、hessian(基于http的遠程方法調用)

基于http協議傳輸,在性能方面還不夠完美,負載均衡和失效轉移依賴于應用的負載均衡器,hessian的使用則與rmi類似,區別在于淡化了registry的角色,通過顯示的地址調用,利用hessianproxyfactory根據配置的地址create一個代理對象,另外還要引入hessian的jar包。

分析JAVA中幾種常用的RPC框架

3、dubbo(淘寶開源的基于tcp的rpc框架)

基于nio框架netty的高性能rpc框架,是阿里巴巴開源的,總體原理如下:

分析JAVA中幾種常用的RPC框架

在了解dubbo之前,要先對zookeeper有深入的理解,當理解了zookeeper后,dubbo也就了無秘密了。

zookeeper作為dubbo服務的注冊中心,dubbo原先基于數據庫的注冊中心,沒采用zookeeper,zookeeper一個分布式的服務框架,是樹型的目錄服務的數據存儲,能做到集群管理數據 ,這里能很好的作為dubbo服務的注冊中心,dubbo能與zookeeper做到集群部署,當提供者出現斷電等異常停機時,zookeeper注冊中心能自動刪除提供者信息,當提供者重啟時,能自動恢復注冊數據,以及訂閱請求。

dubbo的詳細說明在淘寶開源里說的非常詳細,在工作中很多生產項目都用了dubbo,過程中也發現了很多需要注意的地方,尤其是那繁多的配置,設置不當都會讓人煩腦,最好能再基于現有開源的dubbo再定制優化一下。

原文鏈接:http://blog.csdn.net/volts/article/details/54672525

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄绝一级| 国产午夜亚洲精品理论片不卡 | 亚洲 欧美 清纯 校园 另类 | 欧美精品久久久久久久免费观看 | 欧美日韩国产成人精品 | 纲手被鸣人插 | 欧美第十页 | 久久国产乱子伦免费精品 | 四虎永久在线精品波多野结衣 | 日韩欧美在线视频一区二区 | 成人精品一区二区三区中文字幕 | 网站久久| 韩国理论三级在线观看视频 | aaa一级特黄 | 香蕉97超级碰碰碰免费公 | www射com| 精品在线免费观看 | 天堂成人在线视频 | 免费看男女做好爽好硬视频 | 俄罗斯处女摘花 | 玩乳h文奶水和尚 | 久久精品观看 | 毛片网站观看 | 天堂在线免费观看 | www亚洲色图 | 爱爱调教 | 亚洲精品国产乱码AV在线观看 | 校草让我脱了内裤给全班看 | 久久精品男人影院 | 成人在线一区二区 | 国产女主播在线播放一区二区 | 国产一区二区三区高清 | 亚洲一区二区三区在线播放 | 成人福利在线视频免费观看 | 狠狠的撞进去嗯啊h女强男视频 | 日本成人高清视频 | 2019国产精品| 视频大全在线观看网址 | 午夜福利院电影 | 精品无码久久久久久久久 | 国产免费不卡视频 |