源码地址:GitHub·点这里 || GitEE·点这里前端
Dubbo服务化治理的核心框架,以前几年在国内被普遍使用,后续因为微服务的架构的崛起,更多的公司转向微服务下成熟的技术栈,可是Dubbo自己确实是很是优秀的框架。java
常见的应用迭代和升级的过程基本以下:node
而Dubbo框架的核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。正好能够解决上述业务发展的痛点。git
SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用SpringBoot的开发风格作到一键启动和部署。github
后续AliCloud微服务系列组件也不断被使用起来,其中最基础的组件Nacos注册中心,更是直接支持Dubbo框架,这样Cloud和Dubbo两大框架就成功的整合在了一块儿。web
Nacos注册中心主要用于发现、配置、管理微服务。而且提供一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理。spring
如上图Nacos无缝支持一些主流的开源生态框架,例如SprinCloud,Dubbo两大框架。在AliCloud的系列组件中,还包含了Seata,RocketMQ,Sentinel等一系列组件。数据库
SpringCloud和Dubbo整合的结构示意图以下,使用的Nacos中心:apache
Provider提供方:提供核心的Dubbo服务接口;架构
Consumer消费方:消费注册的Dubbo服务接口;
Nacos注册中心:配置、发现和管理Dubbo服务;
经过上述流程不难发现,无论从架构上看,仍是用法过程,基于核心Dubbo框架和微服务原生框架是十分类似,上述流程也遵循这样一个规则:dubbo-server链接本身的业务库DB,并经过dubbo-facade中接口向外提供服务,若是不一样dubbo-server须要访问其余服务接口,也必需要经过其余服务的facade接口操做,dubbo-client做为接口服务消费端,能够经过facade接口访问不少业务模块的服务,总体架构层次十分明了。
案例结构
包含三个模块: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>
配置文件
主要是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框架的注解。
配置文件
主要配置是连接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
推荐阅读:微服务组件和应用