No desenvolvimento normal, geralmente usamos a estrutura rpc ao fazer projetos distribuídos para realizar a arquitetura de microsserviço. Agora, a empresa usa muitos frameworks como o dubbo. Esses frameworks de código aberto são frameworks que integram muitas funções complexas. Este artigo implementa o exemplo de serviço rpc mais simples para ilustrar brevemente a ideia básica da implementação rpc.
O código-fonte foi colocado no github: https://github.com/readreamer23/RpcFrameDemo
1. Classe de quadro principal
Encapsule serviços expostos e métodos de serviço de referência para provedores de serviços e consumidores chamarem
Nome da classe: RpcFrame.java
package com.rpc;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.net.ServerSocket;
import java.net.Socket;
/**
* rpc简单框架实现
* 定义provider暴露服务方法和consumer引用服务方法
*
*/
public class RpcFrame {
/**
* 暴露服务--服务提供者用
*
* @param service 服务实现
* @param port 服务端口
* @throws Exception
*/
public static void export(final Object service, int port) throws Exception {
if (service == null)
throw new IllegalArgumentException("service instance == null");
if (port <= 0 || port > 65535)
throw new IllegalArgumentException("无效端口:" + port);
System.out.println("provider服务暴露service= " + service.getClass().getName() + ", 端口 " + port);
ServerSocket server = new ServerSocket(port);
for (; ; ) {
try {
final Socket socket = server.accept();
new Thread(new Runnable() {
//@Override
public void run() {
try {
try {
ObjectInputStream input = new ObjectInputStream(socket.getI