RPC过程调用
服务提供方
package com.example.rpc;
import java.io.Serializable;
public class UserVo implements Serializable {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package com.example.rpc;
public interface RpcService {
String call(String name);
UserVo getUser(String name);
}
package com.example.rpc;
import java.util.ArrayList;
import java.util.List;
public class RpcServiceImpl implements RpcService {
private static List<UserVo> userVos = new ArrayList<>();
static {
UserVo userVo = new UserVo();
userVo.setAge(20);
userVo.setName("zhangsan");
userVo.setSex("男");
userVos.add(userVo);
UserVo userVo2 = new UserVo();
userVo2.setAge(20);
userVo2.setName("lisi");
userVo2.setSex("男");
userVos.add(userVo2);
UserVo userVo3 = new UserVo();
userVo3.setAge(20);
userVo3.setName("wangermazi");
userVo3.setSex("女");
userVos.add(userVo3);
}
@Override
public String call(String name) {
return "hello:" + name;
}
@Override
public UserVo getUser(String name) {
UserVo userVo = new UserVo();
for (UserVo user : userVos) {
if (user.getName().equals(name)) {
userVo = user;
}
}
return userVo;
}
}
package com.example.rpc;
public class Server {
public static void main(String args[]) {
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
RpcService rpcService = new RpcServiceImpl();
RpcRegisterCenter server = new RpcRegisterCenter();
server.register(rpcService, 1000);
}
}
package com.example.rpc;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Method;
import java.net.Socket;
public class RegisterHelper extends Thread {
Socket socket;
Object service;
public RegisterHelper(Socket socket, Object service) {
this.socket = socket;
this.service = service;
}
@Override
public void run() {
try {
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
String methodName = in.readUTF();
Class<?>[] parameterTypes = (Class<?>[]) in.readObject();
Object[] parameters = (Object[]) in.readObject();
Method method = service.getClass().getMethod(methodName, parameterTypes);
try {
Object result = method.invoke(service, parameters);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(result);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.example.rpc;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class RpcRegisterCenter {
public void register(Object service, int port) {
try {
System.out.println("服务开启");
ServerSocket server = new ServerSocket(port);
Socket socket;
while ((socket = server.accept()) != null) {
new RegisterHelper(socket, service).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务消费者
package com.example.rpc;
public class Server {
public static void main(String args[]) {
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
System.out.println("rpc服务端启动");
RpcService rpcService = new RpcServiceImpl();
RpcRegisterCenter server = new RpcRegisterCenter();
server.register(rpcService, 1000);
}
}