共计 3972 个字符,预计需要花费 10 分钟才能阅读完成。
源码地址: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: 9010
spring:
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;
@Service
public 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: 9011
spring:
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;
@RestController
public 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-base
GitEE 地址:知了一笑
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 分库分表,扩容计划实现 |