rpc服务实现原理的简单示例

平时开发中我们在做分布式项目时经常会用到rpc框架,实现微服务架构。现在公司用到比较多的类似dubbo等框架,这些开源框架是集成了很多功能较复杂的框架。此篇文章实现一个最简单的rpc服务示例,来简单说明rpc实现的最基本思想。

源码已放到github: https://github.com/readreamer23/RpcFrameDemo

一、 核心框架类
封装暴露服务和引用服务方法,供服务提供者和消费者调用
类名: 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

猜你喜欢

转载自blog.csdn.net/dreamer23/article/details/100602459