源码地址:GitHub·点这里 || GitEE·点这里
一、根底组件简介
1、Dubbo框架
Dubbo服务化治理的外围框架,之前几年在国内被宽泛应用,后续因为微服务的架构的崛起,更多的公司转向微服务下成熟的技术栈,然而Dubbo自身的确是十分优良的框架。
常见的利用迭代和降级的过程根本如下:
- 当利用访问量逐步增大,繁多利用减少机器带来的加速度越来越小,晋升效率的办法之一是将利用拆成互不相干的几个利用,以晋升效率。此时,用于减速前端页面开发的Web框架(MVC)是要害。
- 随着垂直利用越来越多,利用之间交互不可避免,将外围业务抽取进去,作为独立的服务,逐步造成稳固的服务中心,使前端利用能更疾速的响应多变的市场需求。此时,用于进步业务复用及整合的分布式服务框架(RPC)是要害。
- 随同业务倒退,服务越来越多,容量的评估,小服务资源的节约等问题逐步浮现,此时需减少一个调度核心基于拜访压力实时治理集群容量,进步集群利用率。此时,用于进步机器利用率的资源调度和治理核心(SOA)是要害。
而Dubbo框架的外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。正好能够解决上述业务倒退的痛点。
2、微服务框架
SpringCloud是一系列框架的有序汇合。它利用SpringBoot的开发便利性奇妙地简化了分布式系统基础设施的开发,如服务发现注册、配置核心、音讯总线、负载平衡、断路器、数据监控等,都能够用SpringBoot的开发格调做到一键启动和部署。
后续AliCloud微服务系列组件也一直被应用起来,其中最根底的组件Nacos注册核心,更是间接反对Dubbo框架,这样Cloud和Dubbo两大框架就胜利的整合在了一起。
3、Nacos注册核心
Nacos注册核心次要用于发现、配置、治理微服务。并且提供一组简略易用的个性集,疾速实现动静服务发现、服务配置、服务元数据及流量治理。
如上图Nacos无缝反对一些支流的开源生态框架,例如SprinCloud,Dubbo两大框架。在AliCloud的系列组件中,还蕴含了Seata,RocketMQ,Sentinel等一系列组件。
二、服务构造图解
SpringCloud和Dubbo整合的构造示意图如下,应用的Nacos核心:
Provider提供方:提供外围的Dubbo服务接口;
Consumer生产方:生产注册的Dubbo服务接口;
Nacos注册核心:配置、发现和治理Dubbo服务;
通过上述流程不难发现,不论从架构上看,还是用法过程,基于外围Dubbo框架和微服务原生框架是十分相似,上述流程也遵循这样一个规定:dubbo-server连贯本人的业务库DB,并通过dubbo-facade中接口向外提供服务,如果不同dubbo-server须要拜访其余服务接口,也必须要通过其余服务的facade接口操作,dubbo-client作为接口服务生产端,能够通过facade接口拜访很多业务模块的服务,整体架构档次非常明了。
三、编码案例实现
1、案例构造和依赖
案例构造
蕴含三个模块:server、facade、client。
外围依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>2.1.1.RELEASE</version></dependency><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version></dependency><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.1.RELEASE</version></dependency>
2、服务端配置
配置文件
次要是Nacos注册核心和Dubbo两个外围配置。
server: port: 9010spring: application: name: node10-dubbo-server cloud: nacos: discovery: server-addr: http://localhost:8848 config: server-addr: http://localhost:8848 file-extension: yaml# Dubbo服务配置dubbo: scan: base-packages: com.cloud.dubbo.service protocol: name: dubbo port: -1 registry: address: spring-cloud://localhost
服务接口实现
这里DubboService即dubbo-facade包中对外提供的接口。
import org.apache.dubbo.config.annotation.Service;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@Servicepublic class DubboServiceImpl implements DubboService { private static final Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ; @Override public String getInfo() { LOGGER.info("node10-dubbo-server start ..."); return "node10-dubbo-server"; }}
留神:@Service是Dubbo框架中的注解,不是Spring框架的注解。
3、生产端配置
配置文件
次要配置是链接Nacos注册核心,订阅注册核心的node10-dubbo-server服务。
server: port: 9011spring: application: name: node10-dubbo-client cloud: nacos: discovery: server-addr: http://localhost:8848 config: server-addr: http://localhost:8848# Dubbo服务配置dubbo: protocol: name: dubbo port: -1 registry: address: spring-cloud://localhost cloud: subscribed-services: node10-dubbo-server
Dubbo接口调用
同样,这里DubboService即dubbo-facade包中对外提供的接口。
import com.cloud.dubbo.service.DubboService;import org.apache.dubbo.config.annotation.Reference;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class DubboWeb { @Reference private DubboService dubboService ; @GetMapping("/getInfo") public String getInfo () { return dubboService.getInfo() ; }}
留神:@Reference也是Dubbo框架中的注解。
如上流程开发实现,先后启动dubbo-server服务和dubbo-client服务,查看注册核心服务列表:
通过上述getInfo接口申请测试,即可看到残缺的案例成果。
四、技术选型
很少有抉择SpringCloud+Dubbo框架的架构模式,这里简略阐明一下为何,因为这两个框架都是相当简单的,学习老本是一个方面,危险是最次要起因,这两个框架同时应用,就象征要面对和解决两个框架下产生的问题,在任何一个框架都能够稳固的解决业务问题时,齐全没必要花里胡哨。
五、源代码地址
GitHub地址:知了一笑https://github.com/cicadasmile/spring-cloud-baseGitEE地址:知了一笑https://gitee.com/cicadasmile/spring-cloud-base
举荐浏览:微服务组件和利用
序号 | 文章题目 |
---|---|
01 | 微服务根底:Eureka组件,治理服务注册发现 |
02 | 微服务根底:Ribbon和Feign组件,实现申请负载平衡 |
03 | 微服务根底:Hystrix组件,实现服务熔断 |
04 | 微服务根底:Turbine组件,实现微服务集群监控 |
05 | 微服务根底:Zuul组件,实现路由网关管制 |
06 | 微服务根底:Config组件,实现配置对立治理 |
07 | 微服务根底:Zipkin组件,实现申请链路追踪 |
08 | 微服务根底:与Dubbo框架、Boot框架比照剖析 |
09 | 微服务根底:Nacos组件,服务和配置管理 |
10 | 微服务根底:Sentinel组件,服务限流和降级 |
11 | 微服务利用:分库分表模式下,数据库扩容计划 |
12 | 微服务利用:Shard-Jdbc分库分表,扩容计划实现 |