概述
Dubbox是一款高性能、轻量级的开源Java RPC(Remote Procedure Call 远程过程调用)框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
角色
- 注册中心(Registry):相当于房东、中介,记录提供者和消费者信息
- 监控中心(Monitor):通过连接注册中心,监控消费者和提供者健康状况
- 服务提供者(provider):Service层
- 服务消费者(consumer):Web层
相关概念
- 远程调用:用@Reference:web调用service,依赖中没有service的jar包,service是war,此时是远程调用
- 本地调用:用@Autowired:service调用dao,依赖中有dao.jar,此时是本地调用
- 长连接:建立连接后,不断进行数据交互
- 短连接:建立连接后,没有操作则自动断开
- WebService:远程服务调用API
- 具体实现:
- 老:axis, cxf
- 新:hessain, dubbox, feign Ribbon
- 具体实现:
快速入门
注册中心Zookeeper
- 上传
zookeeper-3.4.6.tar.gz
至Linux服务器,并解压tar -zxvf
- 创建data文件夹
mkdir /root/zookeeper-3.4.6/data
- 重命名
/root/zookeeper-3.4.6/conf/zoo_example.cfg
为zoo.cfg
,并使用vim编辑器修改zoo.cfg
中的dataDir=/root/zookeeper-3.4.6/data
监控中心
- 上传
dubbo-admin-2.8.4.war
和apache-tomcat.tar.gz
至Linux服务器,解压tomcat - 把
dubbo-admin-2.8.4.war
拷贝到tomcat/webapp
目录下 - 启动tomcat
./tomcat/bin/startup.sh
- 在不改变默认端口的情况下,可以通过 虚拟机IP:8080/dubbo-admin访问监控中心,默认用户名密码均为root,实时监控消费者和提供者的健康状况
服务提供者
-
在Service模块业务层实现类上增加注解
@Service
,注意包名是dubbo不是springframeworkimport com.alibaba.dubbo.config.annotation.Service; @Service public class XxxServiceImpl implements XxxService { ... }
-
在spring主配置文件中增加以下配置
<dubbo:application name="一般和项目名称保持一致,唯一"/> <!--在“注册中心”声明服务提供者名称--> <dubbo:registry address="zookeeper://服务器ip:2181"/> <!--连接注册中心--> <dubbo:annotation package="要暴露服务所在的包路径"/>
服务消费者
-
在Web模块控制层Controller类中调用Service
import com.alibaba.dubbo.config.annotation.Reference; @RestController @RequestMapping("/xxx") public class XxxController { @Reference private XxxService XxxService; ... }
为什么用dubbox?
- dubbox具有以下优势:
- 负载均衡:同一个工程划分成不同模块,每个模块部署在独立的服务器上
- 服务调用链路生成:服务间依赖关系错踪复杂,可以解决服务之间互相是如何调用的
- 服务访问压力以及时长统计、资源调度和治理:基于访问压力实时管理集群容量,提高集群利用率。
- 服务降级:某个服务宕机后调用备用服务
- 可以应用在微服务系统中