1. 简介
在《Spring Cloud Alibaba 服务注册与发现》篇中曾提到,Spring Cloud
Alibaba Nacos Discovery 能无缝整合 Spring Cloud OpenFeign。换言之,Spring
Cloud Alibaba 延续了 Spring Cloud 分布式服务调用的特性。除此之外,Spring
Cloud Alibaba 引入了 Dubbo Spring Cloud,扩展了分布式服务调用能力,不仅能使
Apache Dubbo 和 OpenFeign 共存,还允许 Spring Cloud 标准调用底层通过
Dubbo 支持的通讯协议传输。无论开发人员是 Dubbo 用户还是 Spring Cloud 用户,
都能轻松地驾驭,并以接近“零”成本的代价使应用向上迁移。Dubbo Spring Cloud 致
力于简化 Cloud Native 开发成本,提高研发效能以及提升应用性能等目的。
2. 学习目标
使用 Dubbo Spring Cloud 实现 Spring Cloud 分布式服务调用
使用 Dubbo Spring Cloud 替换 Spring Cloud 分布式服务调用底层协议
理解 Dubbo Spring Cloud 高级特性:服务订阅、元数据、Actuator
3. 我们了解Spring Cloud Alibaba中的Nacos来作为服务注册中心,如Spring Cloud使用
Ribbon或Feign来实现服务消费。这篇介绍Spring Cloud Alibaba下额外支持的RPC方案:Dubbo。
4.入门案例
通过官方文档简单案例,感受Nacos服务注册中心中,利用Dubbo来实现服务提供方与服务消费方。
这里省略Nacos的安装与使用,如果对Nacos还不了解,可以查看博主springcloud alibaba系列文章:
4.1通过直接访问阿里云[沙箱环境](https://start.aliyun.com/bootstrap.html):
https://start.aliyun.com/bootstrap.html
根据需求配置的案例代码进行使用
1.构建服务接口提供方
以谷歌浏览器为例,网站首先,在 "项目基本信息" 部分输入 Group :“com.alibaba.cloud”
以及 Artifact:“dubbo-provider-sample”(见下图绿框部分)。然后,“组件依赖” 输入框搜索:
“Dubbo”(见下图红箭头部分),最后,选择"Spring Cloud Alibaba Dubbo"(见下图红框部分),
如下所示
继续依赖其他组件:
Nacos Service Discovery - 服务注册与发现组件
Spring Web - Spring Web MVC 组件
Spring Boot Actuator - Spring Boot Actator 组件
点击 “生成” 高亮按钮,平台将生成一个名为 “dubbo-provider-sample.zip”的压缩文件,
将其保存到本地目录,并解压该文件,工程目录将随之生成。打开目录下的pom.xml 文件,
不难发现 Dubbo Spring Cloud Starter 声明其中(以下 XML 内容均来自于项目
根路径中的 pom.xml 文件):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>dubbo-provider-sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-provider-sample</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- Dubbo 服务 artifact 本地-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>dubbo-sample-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>