拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Dubbo快速上手

Dubbo 从入门到精通概念、实战与面试题一、Dubbo 是什么Apache Dubbo 是阿里巴巴开源的一款高性能、轻量级的 Java RPC远程过程调用框架主要用于构建分布式服务。它提供了三大核心能力面向接口的远程方法调用——像调用本地方法一样调用远程服务智能容错和负载均衡——服务出问题时自动切换请求均匀分发服务自动注册和发现——服务提供者自动注册消费者自动发现Dubbo 的核心目标是解决分布式系统中“服务如何高效调用”与“服务如何有效治理”两大问题。二、Dubbo 核心架构2.1 五大核心组件组件 角色 职责Provider 服务提供者 暴露服务接口供其他服务调用Consumer 服务消费者 调用 Provider 提供的服务Registry 注册中心 服务注册与发现ZooKeeper、Nacos、EtcdMonitor 监控中心 统计服务调用次数和调用时间Container 服务容器 负责启动、加载、运行服务提供者2.2 工作流程服务容器启动服务提供者服务提供者向注册中心注册服务服务消费者向注册中心订阅服务注册中心向消费者推送服务提供者地址列表消费者根据地址列表调用服务提供者双方将调用信息发送到监控中心三、快速上手实战3.1 引入 Maven 依赖dependencyManagementdependenciesdependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-bom/artifactIdversion3.3.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependencies!-- Dubbo Spring Boot Starter --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactId/dependency!-- Nacos 注册中心 --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-nacos-spring-boot-starter/artifactId/dependency/dependencies3.2 定义服务接口公共模块packagecom.example.dubbo.api;publicinterfaceUserService{UserDTOgetUserById(LonguserId);}3.3 服务提供者Provider实现类packagecom.example.provider.service;importcom.example.dubbo.api.UserService;importcom.example.dubbo.dto.UserDTO;importorg.apache.dubbo.config.annotation.DubboService;importorg.springframework.stereotype.Component;DubboService(version1.0.0,timeout3000)ComponentpublicclassUserServiceImplimplementsUserService{OverridepublicUserDTOgetUserById(LonguserId){UserDTOusernewUserDTO();user.setId(userId);user.setName(张三);returnuser;}}配置文件 application.yml spring:application:name:dubbo-providerdubbo:registry:address:nacos://localhost:8848# 或 zookeeper://localhost:2181protocol:name:triport:500513.4 服务消费者Consumer业务层引用远程服务packagecom.example.consumer.service;importcom.example.dubbo.api.UserService;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.stereotype.Service;ServicepublicclassOrderService{DubboReference(version1.0.0,timeout3000)privateUserServiceuserService;publicStringcreateOrder(LonguserId){UserDTOuseruserService.getUserById(userId);if(usernull){return用户不存在;}return创建订单成功用户user.getName();}}配置文件 application.ymlspring:application:name:dubbo-consumerdubbo:registry:address:nacos://localhost:8848consumer:timeout:30003.5 Controller 暴露 HTTP 接口测试RestControllerpublicclassOrderController{privatefinalOrderServiceorderService;publicOrderController(OrderServiceorderService){this.orderServiceorderService;}GetMapping(/createOrder)publicStringcreateOrder(RequestParamLonguserId){returnorderService.createOrder(userId);}}四、高级特性4.1 负载均衡策略Dubbo 提供 4 种内置负载均衡策略策略 说明 适用场景Random默认 按权重随机选择 大多数场景RoundRobin 按权重轮询 实例性能相近需均匀分配LeastActive 选活跃请求数最少的 实例性能差异大ConsistentHash 相同参数路由到同一实例 有状态服务如缓存配置方式// 通过注解指定DubboReference(version1.0.0,loadbalanceroundrobin)privateUserServiceuserService;// Provider端设置权重DubboService(version1.0.0,weight200)publicclassUserServiceImplimplementsUserService{...}# 全局配置dubbo:consumer:loadbalance:leastactive4.2 集群容错策略策略 说明Failover默认 失败自动切换重试其他服务器默认重试2次Failfast 快速失败只发起一次调用失败立即报错Failsafe 失败安全出现异常直接忽略Failback 失败自动恢复记录失败请求定时重发Forking 并行调用多个服务器只要一个成功即返回配置示例DubboReference(version1.0.0,clusterfailover,retries2)privateUserServiceuserService;4.3 服务多版本管理// Provider 端DubboService(version1.0.0)publicclassUserServiceImplV1implementsUserService{...}DubboService(version2.0.0)publicclassUserServiceImplV2implementsUserService{...}// Consumer 端指定版本DubboReference(version2.0.0)privateUserServiceuserService;五、常见面试题Dubbo 是什么主要功能有哪些Dubbo 是阿里巴巴开源的高性能、轻量级 Java RPC 框架。主要功能包括· 远程调用透明化的远程方法调用· 集群容错失败自动切换、快速失败等· 服务自动发现和注册通过注册中心实现Dubbo 的核心架构是怎样的五大角色Provider服务提供者、Consumer服务消费者、Registry注册中心、Monitor监控中心、Container服务容器。工作流程Provider 启动时向 Registry 注册 → Consumer 从 Registry 订阅 → Registry 推送地址列表 → Consumer 调用 Provider → 双方上报 Monitor。注册中心挂了还能调用服务吗可以。 因为 Consumer 启动时会从注册中心拉取服务提供者地址列表并缓存到本地。注册中心宕机后Consumer 仍可根据本地缓存调用已有服务。但注意新服务提供者无法注册新消费者无法发现新服务服务上下线也无法实时同步。如何动态感知服务上下线Dubbo 采用 事件通知 客户端拉取 方式。以 ZooKeeper 为例服务第一次订阅时拉取全量数据在订阅节点注册 Watcher节点数据变化时ZooKeeper 通过 Watcher 通知客户端客户端重新拉取全量数据并重新注册 Watcher同时 ZooKeeper 通过心跳检测Socket 长连接定时检查服务提供者长期无响应则剔除。Dubbo 支持哪些协议协议 特点dubbo默认 基于 Netty二进制传输吞吐量高triple3.0 新 兼容 gRPC支持 HTTP/2rest 基于 RESTful HTTPredis 基于 Redis 调用memcached 基于 Memcached 调用Dubbo 的 10 层架构service接口层开发者实现业务逻辑config配置层Dubbo 相关配置proxy服务代理层生成客户端/服务端代理registry服务注册层服务注册与发现cluster集群层封装路由和负载均衡monitor监控层统计调用次数和时间protocol远程调用层封装 RPC 调用exchange信息交换层同步转异步transport网络传输层抽象 Netty/Minaserialize数据序列化层面试时不需要死记硬背理解 Dubbo 调用过程中涉及的技术点串联起来即可。负载均衡策略有哪些默认是什么· 随机Random——默认策略· 轮询RoundRobin· 最少活跃LeastActive· 一致性哈希ConsistentHash集群容错策略有哪些默认是什么· Failover默认——失败自动切换重试其他服务器· Failfast——快速失败· Failsafe——失败安全· Failback——失败自动恢复· Forking——并行调用多个Dubbo 3.0 有哪些重要新特性· Triple 协议完美兼容 gRPC基于 HTTP/2· 应用级服务发现从接口级升级到应用级更适应云原生· 全面云原生支持为什么要用 Dubbo 而不是直接 HTTP 调用对比 Dubbo 纯 HTTP协议 二进制高性能 文本协议开销大服务治理 内置注册发现、负载均衡、容错 需自行实现调用方式 像调用本地方法 需手动拼接 URL、解析 JSON
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门