RPC(Remote Process Call) 远程过程调用,是分布式服务调用的流行的解决方案,现在比较流行的RPC框架有Google的grpc,脸谱的Thrift,Hadoop的子项目Avro-RPC等。
作为RPC的菜鸟,该怎么建立起对RPC的初步认识呢,那就亲自手动的自己敲一个简单的RPC实现,对RPC的理解有很大的帮助。下面是自己模拟简单实现RPC的实现,代码简陋,适合初学(最好自己使用过RPC技术)。
建立两个项目RpcService,RpcClient
一、Rpc服务端(RpcService)
服务器端建立对外提供服务的service,rpc的发布,开启服务,对应的包结构:
com.hhh.rpc.service –服务提供
com.hhh.rpc.publish –服务发布
com.hhh.app –服务开启
1、 对外提供的服务
1.1 服务接口
package com.hhh.rpc.service;
/**
* Created by 泡泡 on 2017/3/23.
* 服务提供
*/
public interface GreetService {
String greet(String msg);
}
1.2 服务实现
package com.hhh.rpc.service.impl;
import com.hhh.rpc.service.GreetService;
/**
* Created by 泡泡 on 2017/3/23.
* 服务实现
*/
public class GreetServiceImpl implements GreetService {
@Override
public String greet(String msg) {
return "servive greeting:" + msg != null ? msg :"Hello RPC!";
}
}
2、服务发布
服务发布利用传统的阻塞Socket通信
package com.hhh.rpc.publish;
import java.io.*;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by 泡泡 on 2017/3/23.
* 服务发布
*/
public class RpcPublish {
private static final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
/**
* host:对外暴露的服务地址
* port:服务端口
**/
public static void publish(String host,