SpringCloud微服务:基于Nacos组件,整合Dubbo框架

源码地址:GitHub·点这里 || GitEE·点这里前端

1、基础组件简介

一、Dubbo框架

Dubbo服务化治理的核心框架,以前几年在国内被普遍使用,后续因为微服务的架构的崛起,更多的公司转向微服务下成熟的技术栈,可是Dubbo自己确实是很是优秀的框架。java

常见的应用迭代和升级的过程基本以下:node

  • 当应用访问量逐渐增大,单一应用增长机器带来的加速度愈来愈小,提高效率的方法之一是将应用拆成互不相干的几个应用,以提高效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
  • 随着垂直应用愈来愈多,应用之间交互不可避免,将核心业务抽取出来,做为独立的服务,逐渐造成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提升业务复用及整合的分布式服务框架(RPC)是关键。
  • 伴随业务发展,服务愈来愈多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增长一个调度中心基于访问压力实时管理集群容量,提升集群利用率。此时,用于提升机器利用率的资源调度和治理中心(SOA)是关键。

而Dubbo框架的核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。正好能够解决上述业务发展的痛点。git

二、微服务框架

SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用SpringBoot的开发风格作到一键启动和部署。github

后续AliCloud微服务系列组件也不断被使用起来,其中最基础的组件Nacos注册中心,更是直接支持Dubbo框架,这样Cloud和Dubbo两大框架就成功的整合在了一块儿。web

三、Nacos注册中心

Nacos注册中心主要用于发现、配置、管理微服务。而且提供一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理。spring

如上图Nacos无缝支持一些主流的开源生态框架,例如SprinCloud,Dubbo两大框架。在AliCloud的系列组件中,还包含了Seata,RocketMQ,Sentinel等一系列组件。数据库

2、服务结构图解

SpringCloud和Dubbo整合的结构示意图以下,使用的Nacos中心:apache

Provider提供方:提供核心的Dubbo服务接口;架构

Consumer消费方:消费注册的Dubbo服务接口;

Nacos注册中心:配置、发现和管理Dubbo服务;

经过上述流程不难发现,无论从架构上看,仍是用法过程,基于核心Dubbo框架和微服务原生框架是十分类似,上述流程也遵循这样一个规则:dubbo-server链接本身的业务库DB,并经过dubbo-facade中接口向外提供服务,若是不一样dubbo-server须要访问其余服务接口,也必需要经过其余服务的facade接口操做,dubbo-client做为接口服务消费端,能够经过facade接口访问不少业务模块的服务,总体架构层次十分明了。

3、编码案例实现

一、案例结构和依赖

案例结构

包含三个模块: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接口请求测试,便可看到完整的案例效果。

4、技术选型

不多有选择SpringCloud+Dubbo框架的架构模式,这里简单说明一下为什么,由于这两个框架都是至关复杂的,学习成本是一个方面,风险是最主要缘由,这两个框架同时使用,就意味要面对和解决两个框架下产生的问题,在任何一个框架均可以稳定的解决业务问题时,彻底不必花里胡哨。

5、源代码地址

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分库分表,扩容方案实现
相关文章
相关标签/搜索