dubbo的RPC是什麼,還有什麼其他的RPC?
阿新 • • 發佈:2019-02-10
RPC是遠端過程呼叫的簡稱,廣泛應用在大規模分散式應用中,作用是有助於系統的垂直拆分,使系統更易拓展。Java中的RPC框架比較多,各有特色,廣泛使用的有RMI、Hessian、Dubbo等。RPC還有一個特點就是能夠跨語言。
1、RMI(遠端方法呼叫)
JAVA自帶的遠端方法呼叫工具,不過有一定的侷限性,畢竟是JAVA語言最開始時的設計,後來很多框架的原理都基於RMI,RMI的使用如下:
對外介面
12345 | <span style= "font-size:12px;" >public interface IService extends Remote { public String queryName(String no) throws RemoteException; }</span> |
服務實現
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 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客戶端 [java] view plain copy import java.rmi.AccessException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // RMI客戶端 public class Client { public static void main(String[] args) { // 註冊管理器 Registry registry = null ; try { // 獲取服務註冊管理器 registry = LocateRegistry.getRegistry( "127.0.0.1" , 8088 ); // 列出所有註冊的服務 String[] list = registry.list(); for (String s : list){ System.out.println(s); } } catch (RemoteException e) { } try { // 根據命名獲取服務 IService server = (IService) registry.lookup( "vince" ); // 呼叫遠端方法 String result = server.queryName( "ha ha ha ha" ); // 輸出呼叫結果 System.out.println( "result from remote : " + result); } catch (AccessException e) { } catch (RemoteException e) { } catch (NotBoundException e) { } } } RMI服務端 [java] view plain copy 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 { // 建立一個服務註冊管理器
|