不知道现在还有多少人在使用仅限于JAVA语言的RMI远程调用方式,在此写一个小demo,供大家了解或者回顾一下这种感觉被遗弃方式。
packagecom.rmi; importlombok.AllArgsConstructor; importlombok.Data; importjava.io.Serializable; publicclassUserimplementsSerializable { privatestaticfinallongserialVersionUID=2159427410483687648L; privateIntegerid; privateStringusername; }
packagecom.rmi; importjava.rmi.Remote; importjava.rmi.RemoteException; publicinterfaceUserServiceextendsRemote { UserselectUserById(IntegeruserId) throwsRemoteException; }
packagecom.rmi; importjava.rmi.RemoteException; importjava.rmi.server.UnicastRemoteObject; publicclassUserServiceImplextendsUnicastRemoteObjectimplementsUserService { publicUserServiceImpl() throwsRemoteException { } publicUserselectUserById(IntegeruserId) throwsRemoteException { System.out.println("用户管理服务接收到客户端请求,请求参数 userId = "+userId); // 模拟假数据返回returnnewUser(userId, "张三"); } }
packagecom.rmi; importjava.net.MalformedURLException; importjava.rmi.AlreadyBoundException; importjava.rmi.Naming; importjava.rmi.RemoteException; importjava.rmi.registry.LocateRegistry; publicclassPublish { publicstaticvoidmain(String[] args) throwsRemoteException { UserServiceuserService=newUserServiceImpl(); try { // 对外暴露的服务端口LocateRegistry.createRegistry(8888); // 对外暴露的服务地址Naming.bind("rmi://localhost:8888/userService", userService); System.out.println("服务发布成功!"); } catch (AlreadyBoundExceptione) { e.printStackTrace(); } catch (MalformedURLExceptione) { e.printStackTrace(); } } }
packagecom.rmi; importjava.net.MalformedURLException; importjava.rmi.Naming; importjava.rmi.NotBoundException; importjava.rmi.RemoteException; publicclassUserController { publicstaticvoidmain(String[] args) { try { UserServiceuserService= (UserService) Naming.lookup("rmi://localhost:8888/userService"); Useruser=userService.selectUserById(1); System.out.println("远程服务调用成功,返回值信息为:"+user); } catch (NotBoundExceptione) { e.printStackTrace(); } catch (MalformedURLExceptione) { e.printStackTrace(); } catch (RemoteExceptione) { e.printStackTrace(); } } }
Publish即RMI的服务器端启动程序,UserController是RMI的客户端调用程序,可以运行看到客户端输出结果为:远程服务调用成功,返回值信息为:User(id=1, username=张三)
主要是定义接口和接口的实现类,然后是发布一个RMI服务。