前言:今天给大家给大家讲解的是Dubbp的调用原理,以及一个demo测试向大家展示Dubbo的运行过程。在前面一文中,给大家讲到了—Dubbo之Zookeeper安装测试和Zookeeper集群的搭建 ,在其中已经给大家讲到了Zookeeper集群的搭建,今天我们也要用到该集群,如果没有安装的,请先行安装,再看下文!!
1.Dubbo原理
1.1 高性能Java RPC框架
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
1.2 Dubbo特性
- 面向接口代理的高性能RPC调用
- 服务自动注册与发现
- 运行期流量调度
- 智能负载均衡
- 高度可扩展能力
- 可视化的服务治理与运维
以上几点接来源于dubbo的官网:http://dubbo.apache.org/zh-cn/
1.3 Dubbo工作原理
1.3.1 Dubbo高可用测试
- 测试1:将后台提供者宕机一台,检查是否影响消费者调用。
不影响 注册中心实现心跳检测机制. 即使没有注册中心,又要有提供者就可以正常访问
- 测试2: 将zookeeper宕机一台,检查是否影响用户使用。
不影响 因为zk搭建了集群.可以实现高可用
- 测试3: 将zookeeper集群全部宕机,检查是否影响用户使用。
不影响. 因为消费者将zk注册中心的数据,已经保存到本地(消费者的内存中),所以不收影响
1.3.2 Dubbo通讯问题
核心:微服务通信一般都是靠RPC(统称)
dubbo中的RPC基于dubbo的协议规范
1.4 Dubbo调用原理
1.4.1 原理说明
- 需求:是否可以实现服务的自动发现和注册
图很丑,没有大神级的画得好看,将就着看吧。
图示解析:
- 当服务提供者启动时,会将服务数据保存到zk中。
- 当zk接收用户服务信息之后,会将数据保存到服务列表中。
- 当消费者启动时,先连接zk获取zk的服务列表。
- 之后缓存到本地,方便下次访问。
- 消费者接收用户的请求时,根据负载均衡策略,实现请求的发送,并且获取服务端的数据(RPC)。
- Zk实时的心跳检测,如果后台服务器宕机,则需要更新自己的服务列表,同时广播给全部的客户端。
1.5 Dubbo入门案例
1.5.0 导入数据库
CREATE DATABASE /*!32312 IF NOT EXISTS*/`jtdb` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `jtdb`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(40) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(40) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `cc` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;
/*Data for the table `user` */
insert into `user`(`id`,`name`,`age`,`sex`) values (1,'黑熊精',4000,'男'),(2,'鲤鱼精',5000,'男'),(3,'金角大王',3000,'男'),(4,'银角大王',4000,'男'),(5,'唐僧',30,'男'),(6,'悟空',501,'男'),(7,'白龙驴',2000,'男'),(8,'八戒',502,'男'),(9,'沙悟净',503,'男'),(11,'小乔',17,'女'),(12,'貂蝉',18,'女'),(16,'黄月英',18,'女'),(17,'孙尚香',18,'女'),(18,'甄姬c',20,'女'),(21,'孙尚香D',18,'女'),(22,'刘备',40,'男'),(23,'陆逊',33,'男'),(24,'陆逊',33,'男'),(25,'关羽',40,'男'),(27,'阿科',20,'女'),(31,'王昭君',19,'女'),(38,'貂蝉',18,'女'),(39,'西施',18,'女'),(40,'严真煌',16,'女'),(41,'白骨精',18,'女')