本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能点有哪些.目前要想实现一个简单的服务调用框架要做到的有以下的功能. 服务注册与发现,调用过程封装,消费负载均衡,序列化与反序列化,网关(可以用nginx实现)等.本文则从实现这些功能点的步骤出发来模拟一个 简单的服务调用框架 1.idea中创建父项目rpc-parent,子项目 rpc-common…
参考:dubbo消费方服务调用过程源码分析dubbo基于spring的构建分析Dubbo概述--调用过程dubbo 请求调用过程分析dubbo集群容错机制代码分析1dubbo集群容错策略的代码分析2dubbo spi机制源码学习Dubbo-服务调用过程 一.通过分析一个典型rpc方法调用的调用栈来说明调用过程. 1.定义一个接口 public interface DemoService { /** * class_name: sayHello * param: [param] * describ…
Dubbo的出现背景 Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 当企业开始大规模的服务化以后,远程通信带来的弊端就越来越明显了.比如说 服务链路变长了,如何实现对服务链路的跟踪和监控呢? 服务的大规模集群使得服务之间需要依赖第三方注册中心来解决服务的发现和服务的感知问题 服务通信之间的异常,需要有一种保护机制防止一个节点故障引发大规模的系统故障,所以要有容错机制…
一.前言 公司的项目基于阿里的Dubbo 微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现 Dubbo 的 分布式服务,如下图: 这里只罗列了部分服务器作为参考说明.其中 api 是消费者服务,driver 和 order 是 提供者服务.华东1 和 华东 2 分别是两个局域网,局域网内可用内网通信.两个局域网只能通过外网通信. 二.消费者分布式服务 消费者的分布式是通过 Nginx 配置负载均衡…
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度.考验你的整体RPC框架系统设计能力. 具体,mike来为大家详解. RPC和RPC框架 1.RPC(Remote Procedure Call) 即远程过程调用, 主要解决远程通信间的问题,不需要了解底层网络的通信机制. 2.RPC框架 RPC框架负责屏蔽底层的传输方式(TCP或者UDP).序列化方…
之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设计能力. RPC和RPC框架 1.RPC(Remote Procedure Call) 即远程过程调用, 主要解决远程通信间的问题,不需要了解底层网络的通信机制. 2.RPC框架 RPC框架负责屏蔽底层的传输方式(TCP或者UDP).序列化方式.以及通信细节. 实际使用中,并不需要关心底层通信细节和调用过程,…
package 计时器; import java.util.Timer; import java.util.TimerTask; /* * 主要是想在另一个类里面,使用该类的对象,如何使用呢?如何传递同一个实例对象 */ public class TimerDemo { public static void main(String[] args) { Timer t = new Timer(); t.schedule(new MyTask(t), 3000); } } class MyTask…
建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.apache.struts2.StrutsConstants就是一个常量类,它定义了Struts框架中与配置有关的常量,而org.apache.struts2.StrutsStatics则是一个常量接口,其中定义了OGNL访问的关键字. 关于常量接口(类)我们来看一个例子,首先定义一个常量类: publ…
用socket可以简单的发送一些文本信息,太复杂的可能发送不了,比如图片音频可能要用到http来发送和接收了.最基本的使用socket来发送一个字符串,但有的时候我们希望能够发送一个类,这样server接收端处理信息将会非常方便. 对于待发送的类,要用socket来发送,则必须实现Serializable接口.实现这个接口后就将发送的对象串行化了,再使用对象输入输出流(ObjectOutputStream, ObjectInputStream)就可实现发送与接收.这个过程有点像通信里边的调制过程…
package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式…