2.快速上手-上-灵析社区

没晒干的咸鱼

2.快速上手

一、如何引入 Dubbo Spring Cloud

Dubbo Spring Cloud 引入的方式通常有两种,由易到难分别为:Aliyun Java Initializr 引入和 Maven pom.xml 依赖。官方推荐使用 Aliyun Java Initializr 方式引入 Dubbo Spring Cloud,以便简化组件之间的依赖关系。

[偷懒] 直接在沙箱里查看应用代码

点击 链接,直接访问沙箱环境,这里会有为你准备好的案例代码 ^_^。

[简单] 通过 Aliyun Java Initializr 创建工程并引入 Dubbo Spring Cloud(推荐)

Dubbo Spring Cloud 组件的在整个 Spring Cloud Alibaba 版本和依赖最为复杂,推荐读者使用 Aliyun Java Initializr 构建应用工程。读者选择偏好的 Web 浏览器访问 Aliyun Java Initializr,其资源网址为:https://start.aliyun.com/bootstrap.html

下文以 Google Chrome 浏览器为例,当网页加载后,首先,在 "项目基本信息" 部分输入 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

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

不过该 starter 并未指定版本,具体的版本声明在 com.alibaba.cloud:spring-cloud-alibaba-dependencies 部分:

XML

    <dependencyManagement>
        <dependencies>
            <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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

其中,${spring-cloud-alibaba.version} 和 ${spring-boot.version} 分别为 Spring Cloud Alibaba 和 Spring Boot 组件依赖的版本,它们的版本定义在 <properties> 元素中,即 2.2.1.RELEASE 和 2.3.0.RELEASE:

XML

    <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.0.RELEASE</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    </properties>

如果读者非常熟悉 Maven 依赖管理的配置方式,可以考虑 Maven pom.xml 依赖 Dubbo Spring Cloud。

[高级] 通过 Maven pom.xml 依赖 Dubbo Spring Cloud

如果要在您 Dubbo Spring Cloud 的项目中使用 Nacos 来实现服务注册/发现,可将两者 Stater 同时依赖:

XML

        <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>

该声明方式同样需要声明 com.alibaba.cloud:spring-cloud-alibaba-dependencies,内容与上小节相同,在此不再赘述。下一节将讨论如何使用 Dubbo Spring Cloud 构建服务提供者。

二、使用 Dubbo Spring Cloud 实现 Dubbo 服务消费方

由于 Java 服务仅为 EchoService、服务提供方应用 dubbo-provider-sample 以及 Nacos 服务器均已准备完毕。由于应用创建的步骤类似,构建消费方应用 dubbo-consumer-sample 的操作不再重复。

依赖 artifact - dubbo-sample-api

与服务提供方 Maven 工程类,需添加 artifact dubbo-sample-api 依赖,完整的组件 Maven 依赖:

XML

        <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>

配置 Dubbo 服务消费方

Dubbo 服务消费方配置与服务提供方类似,当前应用 dubbo-consumer-sample 属于纯服务消费方,因此,所需的 boostrap.yaml 文件配置更精简:

YAML

dubbo:
  cloud:
    subscribed-services: dubbo-provider-sample
    
spring:
  cloud:
    nacos:
      # Nacos 服务发现与注册配置
      discovery:
        server-addr: 127.0.0.1:8848

对比应用 dubbo-provider-sample,除应用名称 spring.application.name 存在差异外,dubbo-consumer-sample 新增了属性 dubbo.cloud.subscribed-services 的设置。并且该值为服务提供方应用 "dubbo-provider-sample"。

dubbo.cloud.subscribed-services: 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 “,” 分割。 不推荐使用默认值为 "*",它将订阅所有应用。

当应用使用属性 dubbo.cloud.subscribed-services 默认值时,日志中将会输出一行警告:

Current application will subscribe all services(size:x) in registry, a lot of memory and CPU cycles may be used, thus it’s strongly recommend you using the externalized property ‘dubbo.cloud.subscribed-services’ to specify the services

由于当前应用属于 Web 应用,它会默认地使用 8080 作为 Web 服务端口,如果 dubbo-provider-sample 和 dubbo-consumer-sample 在本地同步部署的话, 两者 Web 端口会出现冲突,需调整 dubbo-consumer-sample application.properties 中的 server.port 和 management.server.port:

# 应用服务 WEB 访问端口
server.port=9090

# Actuator Web 访问端口
management.server.port=9091

引导 Dubbo Spring Cloud 服务消费方应用

为了减少实现步骤,编辑引导类 DubboConsumerSampleApplication 将 Dubbo 服务消费以及引导功能合二为一:

Java

@EnableDiscoveryClient
@EnableAutoConfiguration
@RestController
public class DubboConsumerSampleApplication {

    @Reference
    private EchoService echoService;

    @GetMapping("/echo")
    public String echo(String message) {
        return echoService.echo(message);
    }

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerSampleApplication.class);
    }
}

运行该引导类,通过curl命令访问 REST 资源/echo:

Bash

% curl "http://127.0.0.1:9090/echo?message=Hello,World"
[ECHO] Hello,World

不难发现,Dubbo 服务提供方应用 dubbo-provider-sample 的EchoService计算结果返回到 dubbo-consumer-sample 中的 REST 资源/echo。同时,在 dubbo-provider-sample 应用日志出现了以下内容:

[DUBBO] The connection of /x.x.x.x:64051 -> /x.x.x.x:20881 is established., dubbo version: 2.7.6, current host: x.x.x.x

说明 Dubbo 服务消费端应用 dubbo-consumer-sample(端口:64051) 向服务提供方应用 dubbo-provider-sample 建立连接(端口:20881)。

阅读量:2012

点赞量:0

收藏量:0