长沙网站建设zh68,网页制作技术实训报告,网站建设猪八戒,做网站的去哪找私活目录 1 框架介绍1.1 概述1.2 运行架构1.3 整体设计 2 环境搭建2.1 源码拉取2.2 源码结构2.3 环境导入2.4 测试2.5 管理控制台 1 框架介绍 1.1 概述
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架#xff0c;使得应用可通过高性能的 RPC 实现服务的输出和输入功能#… 目录 1 框架介绍1.1 概述1.2 运行架构1.3 整体设计 2 环境搭建2.1 源码拉取2.2 源码结构2.3 环境导入2.4 测试2.5 管理控制台 1 框架介绍 1.1 概述
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架使得应用可通过高性能的 RPC 实现服务的输出和输入功能可以和 Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架它提供了三大核心能力面向接口的远程方法调用智能容错和负载均衡以及服务自动注册和发现。
1.2 运行架构
dubbo运行架构如下图示 节点角色说明
节点角色说明Provider暴露服务的服务提供方Consumer调用远程服务的服务消费方Registry服务注册与发现的注册中心Monitor统计服务的调用次数和调用时间的监控中心Container服务运行容器
调用关系说明
服务容器负责启动加载运行服务提供者。服务提供者在启动时向注册中心注册自己提供的服务。服务消费者在启动时向注册中心订阅自己所需的服务。注册中心返回服务提供者地址列表给消费者如果有变更注册中心将基于长连接推送变更数据给消费者。服务消费者从提供者地址列表中基于软负载均衡算法选一台提供者进行调用如果调用失败再选另一台调用。服务消费者和提供者在内存中累计调用次数和调用时间定时每分钟发送一次统计数据到监控中心。
关于dubbo 的特点分别有连通性、健壮性、伸缩性、以及向未来架构的升级性。特点的详细介绍也可以参考官方文档。
1.3 整体设计 图例说明
图中左边淡蓝背景的为服务消费方使用的接口右边淡绿色背景的为服务提供方使用的接口位于中轴线上的为双方都用到的接口。图中从下至上分为十层各层均为单向依赖右边的黑色箭头代表层之间的依赖关系每一层都可以剥离上层被复用其中Service 和 Config 层为 API其它各层均为 SPI。图中绿色小块的为扩展接口蓝色小块为实现类图中只显示用于关联各层的实现类。图中蓝色虚线为初始化过程即启动时组装链红色实线为方法调用过程即运行时调时链紫色三角箭头为继承可以把子类看作父类的同一个节点线上的文字为调用的方法。
各层说明:
config 配置层对外配置接口以 ServiceConfig, ReferenceConfig 为中心可以直接初始化配置类也可以通过 spring 解析配置生成配置类proxy 服务代理层服务接口透明代理生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心扩展接口为 ProxyFactoryregistry 注册中心层封装服务地址的注册与发现以服务 URL 为中心扩展接口为 RegistryFactory, Registry, RegistryServicecluster 路由层封装多个提供者的路由及负载均衡并桥接注册中心以 Invoker 为中心扩展接口为 Cluster, Directory, Router, LoadBalancemonitor 监控层RPC 调用次数和调用时间监控以 Statistics 为中心扩展接口为 MonitorFactory, Monitor, MonitorServiceprotocol 远程调用层封装 RPC 调用以 Invocation, Result 为中心扩展接口为 Protocol, Invoker, Exporterexchange 信息交换层封装请求响应模式同步转异步以 Request, Response 为中心扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServertransport 网络传输层抽象 mina 和 netty 为统一接口以 Message 为中心扩展接口为 Channel, Transporter, Client, Server, Codecserialize 数据序列化层可复用的一些工具扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool
2 环境搭建
接下来逐步对dubbo各个模块的源码以及原理进行解析目前dubbo框架已经交由Apache基金会进行孵化被在github开源。
Dubbo 社区目前主力维护的有 2.6.x 和 2.7.x 两大版本其中
2.6.x 主要以 bugfix 和少量 enhancements 为主因此能完全保证稳定性2.7.x 作为社区的主要开发版本得到持续更新并增加了大量新 feature 和优化同时也带来了一些稳定性挑战
2.1 源码拉取
通过以下的这个命令签出最新的dubbo项目源码,并导入到IDEA中
git clone https://github.com/apache/dubbo.git dubbo可以看到Dubbo被拆分成很多的Maven项目在后续课程中会介绍左边每个模块的大致作用。 下载源码导入工程后进行编译并跳过测试这个过程中可能会遇到以下问题 xxxxxxxxxx
[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.5.1:compile (default) on project dubbo-serialization-protobuf: Missing:
[ERROR] ----------
[ERROR] 1) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1
[ERROR]
[ERROR] Try downloading the file manually from the project website.
[ERROR]
[ERROR] Then, install it using the command:
[ERROR] mvn install:install-file -DgroupIdcom.google.protobuf -DartifactIdprotoc -Dversion3.7.1 -Dclassifierwindows-x86_64 -Dpackagingexe -Dfile/path/to/file
[ERROR]
[ERROR] Alternatively, if you host your own repository you can deploy the file there:
[ERROR] mvn deploy:deploy-file -DgroupIdcom.google.protobuf -DartifactIdprotoc -Dversion3.7.1 -Dclassifierwindows-x86_64 -Dpackagingexe -Dfile/path/to/file -Durl[url] -DrepositoryId[id]
[ERROR]
[ERROR] Path to dependency:
[ERROR] 1) org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8
[ERROR] 2) com.google.protobuf:protoc:exe:windows-x86_64:3.7.1
[ERROR]
[ERROR] ----------
[ERROR] 1 required artifact is missing.
[ERROR]
[ERROR] for artifact:
[ERROR] org.apache.dubbo:dubbo-serialization-protobuf:jar:2.7.8
[ERROR]
[ERROR] from the specified remote repositories:
[ERROR] apache.snapshots (https://repository.apache.org/snapshots, releasesfalse, snapshotstrue),
[ERROR] alimaven (http://maven.aliyun.com/nexus/content/groups/public/, releasestrue, snapshotsfalse)手动下载按照提示的命令执行 xxxxxxxxxx
mvn install:install-file -DgroupIdcom.google.protobuf -DartifactIdprotoc -Dversion3.7.1 -Dclassifierwindows-x86_64 -Dpackagingexe -DfileC:\Users\22863\Desktop\test\protoc-3.7.1-windows-x86_64.exe2.2 源码结构
通过如下图形可以大致的了解到dubbo源码各个模块的相关作用 模块说明
dubbo-common 公共逻辑模块包括 Util 类和通用模型。dubbo-remoting 远程通讯模块相当于 Dubbo 协议的实现如果 RPC 用 RMI协议则不需要使用此包。dubbo-rpc 远程调用模块抽象各种协议以及动态代理只包含一对一的调用不关心集群的管理。dubbo-cluster 集群模块将多个服务提供方伪装为一个提供方包括负载均衡, 容错路由等集群的地址列表可以是静态配置的也可以是由注册中心下发。dubbo-registry 注册中心模块基于注册中心下发地址的集群方式以及对各种注册中心的抽象。dubbo-monitor 监控模块统计服务调用次数调用时间的调用链跟踪的服务。dubbo-config 配置模块是 Dubbo 对外的 API用户通过 Config 使用Dubbo隐藏 Dubbo 所有细节。dubbo-container 容器模块是一个 Standlone 的容器以简单的 Main 加载 Spring 启动因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性没必要用 Web 容器去加载服务。
2.3 环境导入
在本次课程中不仅讲解dubbo源码还会涉及到相关的基础知识为了方便学员快速理解并掌握各个内容已经准备好了相关工程只需导入到IDEA中即可。对于工程中代码的具体作用在后续课程会依次讲解
2.4 测试
1 安装zookeeper
2 修改官网案例配置zookeeper地址
3 启动服务提供者启动服务消费者
2.5 管理控制台 下载管理控制台 GITHUB地址 进入源码目录 进行打包编译 xxxxxxxxxxmvn clean package -Dmaven.test.skiptrue构建成功提示 如果构建过程中出现nodejs安装包下载错误 可以将安装包直接放置maven仓库内资料中已提供安装包。
启动后台管理服务 xxxxxxxxxxjava -jar dubbo-admin-0.2.0-SNAPSHOT.jar管理后台 地址 http://127.0.0.1:8080/ 默认账户名和密码都为root 进入管理后台 可以看到所启动的服务端与消费端。