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

3次阅读

共计 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 分库分表,扩容计划实现
正文完
 0