手写 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的部分核心功能,以此理解这两个技术的内在联系和工作原理。 一、Netty基础 Netty的核心在于其非阻塞I/O模型,基于NIO(非阻塞输入/输出)和EventLoop(事件循环)的概念...
"从零开始手写 Dubbo RPC 框架-泛化调用" Dubbo 是一个基于 Java 实现的 RPC 框架,主要用于个人学习和理解 RPC 的底层实现原理。在这个文件中,我们将深入探讨 Dubbo 的泛化调用机制。 泛化调用 泛化调用是一种...
Dubbo RPC 框架 Generic 调用机制详解 Dubbo RPC 框架是一种基于 Netty 实现的 Java RPC 框架,主要用于个人学习和理解 RPC 底层实现原理。本文将详细介绍 Dubbo RPC 框架中的 Generic 调用机制。 Generic 调用...
Dubbo是一款由阿里巴巴开源的Java RPC框架,它提供了高性能、透明化的远程方法调用服务,使得服务就像调用本地方法一样简单。 在Dubbo的实现中,RPC调用可能会遇到各种失败情况,如网络延迟、服务器故障等。为了...
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring ...掌握Dubbo实战之后,通过手写Dubbo框架,加深对原理的掌握,轻松应对企业开发和面试。
Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了丰富的功能,如服务注册与发现、负载均衡、容错机制等。本篇将介绍如何从零开始构建一个简单的RPC框架,并关注其中的失败策略。 首先,RPC框架的...
在这个"手写模拟Dubbo代码demo"中,我们可以深入理解Dubbo的核心概念和工作原理,以及如何在实际项目中模拟其功能。以下是基于提供的信息详细讲解Dubbo的相关知识点: 1. **服务提供者(Provider)与服务消费者...
【使用介绍文档】:手写的TXT文档提供了详细的使用步骤和技巧,这可能是作者根据自己的实践经验总结出的宝贵知识。文档中可能涵盖了如何安装和配置Zookeeper,如何设置Dubbo的provider和consumer,以及如何调试和...
├─面试必问-大牛带你手写dubbo框架 │ 大牛带你手写Dubbo框架.mp4 │ ├─面试必问-实战分布式之手写分布式事务框架 │ 实战分布式之手写分布式事务框架.mp4 │ ├─面试必问-带你精通springAOP—面试无忧虑 │ 带...
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Zookeeper是一个开源分布式应用程序协调...2.手写RPC 3.Dubbo高可用 4.Dubbo IO模型 5.Dubbo架构 6.源码解析
本资料包旨在帮助学习者深入理解并实践Dubbo框架,特别包含了手写示例代码,注释清晰,便于理解和应用。 1. **RPC原理与Dubbo的角色** RPC(Remote Procedure Call)是一种进程间通信方式,允许程序调用另一个地址...
RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务中间件是如何开发和使用。章节内以源码...
同时,项目还强调了是“手写亲测可用”,这意味着它经过实际验证,具备一定的可靠性和实用性,适合初学者和有经验的开发者用来学习和参考。项目中的代码注释清晰,有助于理解代码的实现逻辑。 标签“spring-dubbo”...
"手写附件中含demo"可能意味着除了标准的代码示例,还包含了开发者自定义的组件或代码解释,以便更深入地理解其工作原理。"表"可能指的是数据库设计或者服务间交互的数据结构,这对于理解服务间的通信和数据流转至关...
首先,让我们从35-Dubbo框架介绍与手写模拟Dubbo开始。Dubbo由阿里巴巴开源,其设计目标是提供一个简单易用、高性能、高可用的服务治理平台。它支持基于接口的透明化调用,让服务调用像本地方法调用一样简单。通过...
具体的手写模拟Dubbo的代码可以在以下地址找到: - 手写代码地址:https://gitee.com/archguide/rpc.git - Git clone地址:https://gitee.com/archguide/rpc.git 此外,了解其他开源RPC框架如Hessian、RMI、gRPC等...
总结来说,这个项目涵盖了从WebSocket的实时通信实现到Netty手写RPC的底层细节,再到Dubbo的服务治理,涉及了现代互联网应用开发的多个重要技术领域。通过实践这样的项目,开发者不仅可以掌握消息推送系统的运作原理...