源码地址: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分库分表,扩容方案实现

SpringCloud微服务:基于Nacos组件,整合Dubbo框架的更多相关文章

  1. springcloud微服务基于redis集群的单点登录

    springcloud微服务基于redis集群的单点登录 yls 2019-9-23 简介 本文介绍微服务架构中如何实现单点登录功能 创建三个服务: 操作redis集群的服务,用于多个服务之间共享数据 ...

  2. 【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign

    上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...

  3. SpringCloud微服务(基于Eureka+Feign+Hystrix+Zuul)

    一.搭建注册中心 1.1.创建一个cloud-service项目 1.2:POM文件依赖 1 <?xml version="1.0" encoding="UTF-8 ...

  4. SpringCloud微服务架构分布式组件如何共享session对象

    一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...

  5. SpringCloud微服务(04):Turbine组件,实现微服务集群监控

    本文源码:GitHub·点这里 || GitEE·点这里 写在前面,阅读本文前,你需要了解熔断器相关内容 SpringCloud微服务:Hystrix组件,实现服务熔断 一.聚合监控简介 1.Dash ...

  6. SpringCloud微服务:阿里开源组件Nacos,服务和配置管理

    源码地址:GitHub·点这里||GitEE·点这里 一.阿里微服务简介 1.基础描述 Alibaba-Cloud致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开 ...

  7. SpringCloud微服务(07):Zipkin组件,实现请求链路追踪

    本文源码:GitHub·点这里 || GitEE·点这里 一.链路追踪简介 1.Sleuth组件简介 Sleuth是SpringCloud微服务系统中的一个组件,实现了链路追踪解决方案.可以定位一个请 ...

  8. SpringCloud微服务(01):Eureka组件,管理服务注册与发现

    本文源码:GitHub·点这里 || GitEE·点这里 一.Eureka基本架构 1.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCl ...

  9. SpringCloud微服务治理技术入门(SCN)

    1.集群.分布式.微服务 首先先理解三个感念 什么是集群?: 同一个业务,部署在多个服务器上,目的是实现高可用,保证节点可用! 什么是分布式?: 一个业务分拆成多个子业务,部署在不同的服务器上,每个子 ...

  10. SpringCloud微服务学习笔记

    SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...

随机推荐

  1. [Cordova-IOS]JavaScript与Swift交互

    [Cordova-IOS]Swift调用JavaScript中的函数 概述 Cordova中,通过插件的形式可以实现JavaScript与Swift的交互,关于Cordova插件的定义以及Swfit如 ...

  2. Visual SVN Server+TortoiseSVN进行源代码管理

    安装VisualSVN Server 安装完之后,可配置SVN Server的IP地址,右键下图红色部分,选择属性,然后可配置ServeName和IP Address 之后可以创建用户.用户组和项目库 ...

  3. JavaScript 基础 学习(三)

    JavaScript 基础 学习(三) 事件三要素 ​ 1.事件源: 绑定在谁身上的事件(和谁约定好) ​ 2.事件类型: 绑定一个什么事件 ​ 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...

  4. 关于Mint-UI中loadmore组件的兼容性问题

    源代码 遇到的问题 写完了之后数据加载,渲染等等都是没有问题的,但是测试总是提上滑刷新不能用,因为是远程开发,测试提就得改,看代码看文档,看半天看不出来问题,想到了兼容性问题,发现也有人遇到这个坑.安 ...

  5. 手写简易的Mybatis

    手写简易的Mybatis 此篇文章用来记录今天花个五个小时写出来的简易版mybatis,主要实现了基于注解方式的增删查改,目前支持List,Object类型的查找,参数都是基于Map集合的,可以先看一 ...

  6. C#中的类与对象

    类:说白了就是类型,是对具体事物的一种抽象总结. 对象:一个具体的事物. 类与对象的关系,类实例化就会得到一个对象,同样一个对象也应该属于某一个类.例如张三这个人,他是一个对象,同时他属于人类,在程序 ...

  7. C++语法小记---友元

    友元函数 延续C语言的结构体编程方式,直接访问类的私有成员,提高效率 友元分为函数友元和类友元 友元函数可以访问类的所有成员 友元类的所有成员函数都是友元函数 友元不具备传递性 友元函数和类的成员函数 ...

  8. 深入理解JVM(一)Java内存区域

    运行时数据区 程序计数器 当前线程执行的字节码的行号指示器 每条线程都有独立的程序计数器,各线程之间计数器互不影响,独立存储. 如果执行的是java方法,计数器记录正在执行的虚拟机字节码指令的位置: ...

  9. 线上CUP负载过高排查方法

      1.top命令查看线程占据的CPU 注意:上面行的cpu是多个内核的平均CPU,不可能超过100% 下面的cpu是每个进程实际占用的cpu,可能超过100% 备注:查看多个内核cpu,只需要在输入 ...

  10. git chechout

    在克隆完一个的版本库时,git会在本地创建一个master分支用于跟踪远端的master分支 如git clone abc.git 默认情况下git会在本地创建一个master分支 但是,在本地mas ...