RMI幾種釋出和引用服務的方式
阿新 • • 發佈:2019-02-16
RMI是Java原生的分散式服務機制,支援Java對Java的分散式訪問,採用Java的序列化協議進行CodeC操作。這裡簡單說下RMI釋出服務和客戶端引用服務的方式。
RMI釋出服務時支援兩種方式,一種是RMI本身的釋出協議,另外一種是採用通用的JNDI的方式來發布服務。
採用JMI本身的釋出協議,可以使用Registry介面,也可以使用Naming工具類。
使用Registry介面時,bind的服務名稱只需要直接寫服務名稱就行,RMI內部會把它變成rmi://ip:port/servicename的方式
採用Naming工具類時,需要指定完整的URI方式時的服務名稱。值得注意的是,也需要先繫結埠號,否則會報ConnectionRefuse的異常public class Server { public static void main(String[] args){ try { DemoService service = new DemoServiceImpl("ITer_ZC"); //指定埠 Registry registry = LocateRegistry.createRegistry(8888); // 註冊服務 registry.bind("demoservice",service); } catch (Exception e) { e.printStackTrace(); } System.out.println("DemoService is running at Server"); } }
public class Server { public static void main(String[] args){ try { DemoService service = new DemoServiceImpl("ITer_ZC"); // 指定埠 LocateRegistry.createRegistry(8888); //完整的URI方式的服務名稱 Naming.bind("rmi://10.2.43.50:8888/demoservice",service); } catch (Exception e) { e.printStackTrace(); } System.out.println("DemoService is running at Server"); } }
採用JNDI的方式來發布RMI服務,需要指定完整的URI方式的服務名稱
public class Server { public static void main(String[] args){ try { DemoService service = new DemoServiceImpl("ITer_ZC"); Registry registry = LocateRegistry.createRegistry(8888); Context nameContext = new InitialContext(); nameContext.rebind("rmi://10.2.43.50:8888/demoservice", service); } catch (Exception e) { e.printStackTrace(); } System.out.println("DemoService is running at Server"); } }
客戶端引用RMI服務時,也可以採用兩種方式來尋找服務,一種是RMI本身的類,一種是JNDI介面的類。
採用RMI本身的類來引用RMI服務
public class Client {
public static void main(String[] args){
String url = "rmi://10.2.43.50:8888/demoservice";
try {
DemoService service = (DemoService)Naming.lookup(url);
System.out.println(service.sayHi());
} catch (Exception e) {
e.printStackTrace();
}
}
}
採用JNDI介面來引用RMI服務
public class Client {
public static void main(String[] args){
String url = "rmi://10.2.43.50:8888/demoservice";
Context nameContext;
try {
nameContext = new InitialContext();
DemoService service = (DemoService)nameContext.lookup(url);
System.out.println(service.sayHi());
} catch (Exception e) {
e.printStackTrace();
}
}
}