平时开发中我们在做分布式项目时经常会用到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