SpringCloudAlibaba专题--2.2.5.RELEASE--Dubbo作为R。。。
⼀:Dubbo介绍
1.历史简介
2011年10⽉27⽇,阿⾥巴巴开源了⾃⼰的SOA服务化治理⽅案的核⼼框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件⾏业中落地,并被⼴泛应⽤
2012年10⽉23⽇Dubbo2.5.3发布后,在Dubbo开源将满⼀周年之际,阿⾥基本停⽌了对Dubbo的主要升级。只在之后的2013年和2014年更新过2次对Dubbo2.4的维护版本,然后停⽌了所有维护⼯作。Dubbo对Srping的⽀持也停留在了Spring 2.5.6版本上
在阿⾥停⽌维护和升级Dubbo期间,当当⽹开始维护⾃⼰的Dubbo分⽀版本Dubbox,⽀持了新版本的Spring,并对外开源了Dubbox。同时,⽹易考拉也维护了⾃⼰的独⽴分⽀Dubbok,可惜并未对外开源
随着微服务的⽕热兴起,在国内外开发者对阿⾥不再升级维护Dubbo的吐槽声中,阿⾥终于开始重新对Dubbo的升级和维护⼯作。在2017年9⽉7⽇,阿⾥发布了Dubbo的2.5.4版本,距离上⼀个版本2.5.3发布已经接近快5年时间了。在随后的⼏个⽉中,阿⾥Dubbo开发团队以差不多每⽉⼀版本的速度开始快速升级迭代,修补了Dubbo⽼版本多年来存在的诸多bug,并对Spring等组件的⽀持进⾏了全⾯升级。
2018年1⽉8⽇,Dubbo 2.6.0版本发布,新版本将之前当当⽹开源的Dubbo分⽀Dubbox进⾏了合并,实现了Dubbo版本的统⼀整合
2018年2⽉15⽇,⼤年三⼗,经过⼀系列紧张的投票,来⾃阿⾥巴巴的⼴受社区欢迎的RPC开源框架Dubbo宣布正式进⼊Apache孵化器
2019 年 5 ⽉,dubbo正式错Apache孵化毕业,成为第⼆个由 Alibaba 捐献后从 Apache 毕业的项⽬
2.Dubbo 架构简介
节点⾓⾊说明
节点⾓⾊说明
Provider暴露服务的服务提供⽅
Consumer调⽤远程服务的服务消费⽅
Registry服务注册与发现的注册中⼼
Monitor统计服务的调⽤次数和调⽤时间的监控中⼼
Container服务运⾏容器
调⽤关系说明
1. 服务容器负责启动,加载,运⾏服务提供者
2. 服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务
3. 服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务
4. 注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于长连接推送变更数据给消费者
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选⼀台提供者进⾏调⽤,如果调⽤失败,再选另⼀台调⽤
6. 服务消费者和提供者,在内存中累计调⽤次数和调⽤时间,定时每分钟发送⼀次统计数据到监控中⼼
Dubbo 架构具有以下⼏个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
以上内容来⾃
在很长的⼀段时间,我们都在讨论Dubbo和Spring Cloud使⽤哪个⽐较好。事实上两个解决⽅案并没有可⽐性。
Dubbo是作为RPC的解决⽅案,⽽Spring Cloud是作为整个分布式系统的⼀站是解决⽅案。Dubbo解决的RPC领域只是分布式系统解决⽅案中的其中⼀部分。
但为什么⼤家总是拿这个两个解决⽅案进⾏对⽐呢?原因是Dubbo并⾮像Feign⼀样,仅实现的远程调⽤的功能。Dubbo在实现了这⼀能⼒的同时,还实现了客户端负载均衡,以及注册中⼼对接(对应的注册中⼼驱动)等功能,所以Dubbo某种程度上说,是⼀种mini版的分布式解决⽅案
严格来说,注册中⼼对接(对应的注册中⼼驱动)等相关功能并⾮RPC层的业务领域,⽽是上层Spring Cloud (Alibaba)的业务领域,所以在Spring Cloud(Alibaba)解决⽅案中,由Spring Cloud负责注册中⼼客户端的对接,⽽Dubbo仅是针对上层不同的注册中⼼,做了内部的兼容驱动。⽐如服务注册,在使⽤Nacos注册中⼼时,Dubbo直接连驱动都没有,全权由上层的Nacos驱动去处理注册的问题。这样:Dubbo更专注于RPC层的问题,其他的分布式层⾯的问题交由上层Spring Cloud(Alibaba)去做。
⼆:Spring Cloud Alibaba 接⼊Apache Dubbo
版本问题
在中已经提到对应的dubbo版本
当然,我们使⽤了Spring Cloud Alibaba,直接使⽤Spring Cloud Alibaba提供的Dubbo 的Starter即可
1.在项⽬pom中引⼊版本控制pom
<properties>
<java.version>1.8</java.version>
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
<dubbo.version>2.7.8</dubbo.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring-cloud-alibaba dependencies pom 依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-cloud-alibaba dependencies pom 依赖包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-cloud dependencies pom 依赖包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--apache Dubbo Dependencies pom 依赖包-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
除了了Spring Boot、Spring Cloud、Spring Cloud Alibaba的pom包以外,Dubbo同样提供了pom的依赖包⽤来管理在使⽤Dubbo过程涉及的jar版本
⽗⼯程说明
由于篇幅原因,搭建的项⽬是多model的项⽬,这⾥不⽅便贴出所有的配置,以下的model均继承该pom,因此pom定义过的jar包,均不⽤指定版本,⽗⼯程maven名称:
<groupId>com.syl.learn</groupId>
<artifactId>spring-cloud-alibaba-dubbo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
标记的为本⽂讨论的model
1.Api 模块
(1)创建model如下
本⽂关注的接⼝只有EchoService (2)Pom⽂件
<parent>
<groupId>com.syl.learn</groupId>
<artifactId>spring-cloud-alibaba-dubbo-demo</artifactId> <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<properties>
<java.version>1.8</java.version>
validation框架</properties>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Spring Cloud Dubbo Sample API</name>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dobbo.version}</version>
</dependency>
<!-- validation -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<!--Validate support dependencies-->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>${el-glassfish.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
</dependencies>
(3)EchoService接⼝
,接⼝很简单
public interface EchoService {
String echo(String message);
}
2.服务提供者模块
(1)创建model如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论