手写 dubbo(2017 最后一篇博客,回家相亲...)
首先 介绍一下 dubbo大神的 博客地址 : http://javatar.iteye.com/blog/1123915
test
constructor
refer
public class SocketConsumer implements RpcRefer { @Override public <T> T refer(Class<T> interfaceClass, String host, int port) { return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class<?>[] {interfaceClass}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Socket socket = null; ObjectInputStream input = null; try { socket = new Socket(host, port); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); InvokeEnity entity = new InvokeEnity(); entity.setServiceName(interfaceClass.getName()); entity.setMethodName(method.getName()); ArrayList<String> parameterTypes= new ArrayList<String>(); for (int i = 0; i < method.getParameterTypes().length; i++) { Class<?> class1 = method.getParameterTypes()[i]; parameterTypes.add(class1.getName()); } entity.setParameterTypes(parameterTypes); entity.setParameters(CollectionUtils.arrayToList(args)); out.writeUTF(FastJsonUtils.toJSONString(entity).toString()); input = new ObjectInputStream(socket.getInputStream()); Object serviceInvoke = input.readObject(); return serviceInvoke; } catch (Exception e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { socket = null; } } if (input != null) { try { input.close(); } catch (IOException e) { input = null; } } } return null; } }); } }
export
public class SocketProducter implements RpcExport { @Override public void export(Object service, int port ) { try { ServerSocket serverSocket = new ServerSocket(port); while (true) { Socket client = serverSocket.accept(); new HandlerThread(client,service); } } catch (Exception e) { e.printStackTrace(); } } private class HandlerThread implements Runnable { private Socket socket; private Object service ; public HandlerThread(Socket client,Object service) { socket = client; this.service = service; new Thread(this).start(); } public void run() { try { DataInputStream input = new DataInputStream(socket.getInputStream()); String request = input.readUTF(); Object execute = null; if( FastJsonUtils.isJson(request)){ InvokeEnity entityEnity = InvokeEnity.transefer(request); String methodName = entityEnity.getMethodName(); List<String> parameterTypeses = entityEnity.getParameterTypes(); List<String> parameteres = entityEnity.getParameters(); Class<?>[] parameterTypes = new Class<?>[parameterTypeses.size()]; Object[] parameters = new Object[parameterTypeses.size()]; for (int i = 0; i <parameterTypeses.size(); i++) { parameterTypes[i] = Class.forName(parameterTypeses.get(i)); parameters[i] = parameteres.get(i); } execute = CGLibUtils.execute(service, methodName, parameterTypes, parameters); /* Method method = service.getClass().getMethod(methodName, parameterTypes); execute = method.invoke(service, parameters); */ } ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(execute); out.close(); input.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; } } } } } }
public interface UserService { public User getUser(String name); }
public class UserServiceImpl implements UserService { @Override public User getUser(String name) { User user = new User(); user.setName(name); user.setPassword(name +"1213212"); return user; } }
producter 提供者
public class ProducterTest { public static void main(String[] args) { RpcFactory rpc = RpcFactory.getInstanceByStrategy("simpleIO"); RpcExport rpcExport = rpc.getRpcExport(); UserService service = new UserServiceImpl(); rpcExport.export(service, Constants.PORT); } }
consumer消费者
public class ConsumerTest { public static void main(String[] args) { RpcFactory rpc = RpcFactory.getInstanceByStrategy("simpleIO"); RpcRefer rpcRefer = rpc.getRpcRefer(); UserService userService = rpcRefer.refer(UserService.class, Constants.IP_ADDR, Constants.PORT); for (int i = 0; i < 10; i++) { User user = userService.getUser("baoyou"); System.out.println(FastJsonUtils.toJSONString(user).toString()); } } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。
个人主页:http://knight-black-bob.iteye.com/
谢谢您的赞助,我会做的更好!
相关推荐
基于Netty手写Dubbo,该资源包含 1、生产者向zk服务的注册,消费者发现服务。 2、RPC远程调用实现。 3、netty服务调用,对象序列化和反序列化。 4、负载均衡的简单实现 详情见博客:...
netty手写dubbo
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring ...掌握Dubbo实战之后,通过手写Dubbo框架,加深对原理的掌握,轻松应对企业开发和面试。
。。。
。。。
。。。
。。。
dubbo-demo dubbo-simulate tomcat.8080
├─面试必问-大牛带你手写dubbo框架 │ 大牛带你手写Dubbo框架.mp4 │ ├─面试必问-实战分布式之手写分布式事务框架 │ 实战分布式之手写分布式事务框架.mp4 │ ├─面试必问-带你精通springAOP—面试无忧虑 │ 带...
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Zookeeper是一个开源分布式应用程序协调...2.手写RPC 3.Dubbo高可用 4.Dubbo IO模型 5.Dubbo架构 6.源码解析
压缩包内含有Dubbo后台管理系统、Zookeeper服务器以及Dubbo提供者和消费者源码。还有一份本人手写Txt文档使用详细介绍,内含本人联系方式,欢迎爱学习的你联系我,相互学习、交流。
本文主要介绍了Dubbo框架的基本原理和使用方法,以及如何手动模拟Dubbo。首先,我们解释了什么是RPC(远程过程调用),它是一种允许一个程序调用另一个...最后,我们提供了一份手写模拟Dubbo的代码,供读者参考和学习。
用于学习dubbo框架 手写的建议版本 里边有注释,都很清晰,如果不懂的话加我
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务中间件是如何开发和使用。章节内以源码...
spring整合dubbo工程demo,maven项目,供大家学习参考,手写亲测可用,简单有备注,清晰明了
dubbo实现分布方式部署(demo)+手写附件中含demo+表+工具zookeeper),入门可以参考
# 手撕RPC实现基于TCP的仿Dubbo实现 >还记得第一次听到这词是在别人的面试视频里,简单了解了一下只知道是远程调用。 >万万没想到我的第一次面试的第一个问题就是与此相关,希望认真准备每一次面试,及时查漏补缺...
1. 基于socketio实现websocket长链接 2. 基于原生netty实现rpc通讯 项目实现包含了消息推送关键理念,及DubboRPC通讯底层关键概念