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分庫分表,擴容方案實現
相關文章
相關標籤/搜索