A simple example of the principle of rpc service implementation

In normal development, we often use the rpc framework when doing distributed projects to realize the microservice architecture. Now the company uses a lot of frameworks like dubbo. These open source frameworks are frameworks that integrate many complex functions. This article implements the simplest rpc service example to briefly illustrate the basic idea of ​​rpc implementation.

The source code has been placed on github:  https://github.com/readreamer23/RpcFrameDemo

1. Core frame class
Encapsulate exposed services and reference service methods for service providers and consumers to call
Class name: 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

Guess you like

Origin blog.csdn.net/dreamer23/article/details/100602459