高效开发 Dubbo?用 Spring Boot 可得劲!

简介: 不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感。为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦。如果您只有简单的 Java 基础和 Maven 经验,而不熟悉 Dubbo,本文档将帮助您从零开始使用 Spring Boot 开发 Dubbo 服务,并使用 EDAS 服务注册中心实现服务注册与发现。

不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感。

为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦。

如果您只有简单的 Java 基础和 Maven 经验,而不熟悉 Dubbo,本文档将帮助您从零开始使用 Spring Boot 开发 Dubbo 服务,并使用 EDAS 服务注册中心实现服务注册与发现。

如果您熟悉 Dubbo,可以选择性地阅读相关章节。

为什么使用 Spring Boot 开发 Dubbo 应用

Spring Boot 使用极简的一些配置,就能快速搭建一个基于 Spring 的应用,提高的日常的开发效率。因此,如果您使用 Spring Boot 来开发基于 Dubbo 的应用,简化了 Bubbo 基于 xml 配置的方式,提高了日常开发效率,提升了工作幸福感。

为什么使用 EDAS 服务注册中心

EDAS 服务注册中心实现了 Dubbo 所提供的 SPI 标准的注册中心扩展,能够完整地支持 Dubbo 服务注册、路由规则配置规则功能

EDAS 服务注册中心能够完全代替 ZooKeeper 和 Redis,作为您 Dubbo 服务的注册中心。同时,与 ZooKeeper 和 Redis 相比,还具有以下优势:

  • EDAS 服务注册中心为共享组件,节省了您运维、部署 ZooKeeper 等组件的机器成本。
  • EDAS 服务注册中心在通信过程中增加了鉴权加密功能,为您的服务注册链路进行了安全加固。
  • EDAS 服务注册中心与 EDAS 其他组件紧密结合,为您提供一整套的微服务解决方案。

本地开发

准备工作

  • 下载、启动及配置轻量级配置中心。

为了便于本地开发,EDAS 提供了一个包含了 EDAS 服务注册中心基本功能的轻量级配置中心。基于轻量级配置中心开发的应用无需修改任何代码和配置就可以部署到云端的 EDAS 中。

请您参考 配置轻量级配置中心 进行下载、启动及配置。推荐使用最新版本。

  • 下载 Maven 并设置环境变量(本地已安装的可略过)。

创建服务提供者

  1. 创建一个 Spring Boot 工程,命名为 spring-boot-dubbo-provider。

    这里我们以 Spring Boot 2.0.6.RELEASE 为例,在 pom.xml 文件中加入如下内容。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.edas</groupId>
            <artifactId>edas-dubbo-extension</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    
    </dependencies>

    如果您需要选择使用 Spring Boot 1.x 的版本,请使用 Spring Boot 1.5.x 版本,对应的 com.alibaba.boot:dubbo-spring-boot-starter 版本为 0.1.0。

    说明: Spring Boot 1.x 版本的生命周期即将在 2019 年 8 月 结束,推荐使用新版本开发您的应用。

  2. 开发 Dubbo 服务提供者

    2.1 Dubbo 中服务都是以接口的形式提供的。因此需要开发一个接口,例如这里的 IHelloService,接口里有若干个可被调用的方法,例如这里的 SayHello 方法。

    package com.alibaba.edas.boot;
     
    public interface IHelloService {
     String sayHello(String str);
    }

2.2 在服务提供方,需要实现所有以接口形式暴露的服务接口。例如这里实现 IHelloService 接口的类为 HelloServiceImpl

   package com.alibaba.edas.boot;

 import com.alibaba.dubbo.config.annotation.Service;
 
 @Service
 public class HelloServiceImpl implements IHelloService {
 
     public String sayHello(String name) {
         return "Hello, " + name + " (from Dubbo with Spring Boot)";
     }
 
 }

**说明:** 这里的 Service 注解式 Dubbo 提供的一个注解类,类的全名称为:**com.alibaba.dubbo.config.annotation.Service** 。

2.3 配置 Dubbo 服务。在 application.properties/application.yaml 配置文件中新增以下配置:

 # Base packages to scan Dubbo Components (e.g @Service , @Reference)
 dubbo.scan.basePackages=com.alibaba.edas.boot
 dubbo.application.name=dubbo-provider-demo
 dubbo.registry.address=edas://127.0.0.1:8080
    
**说明:** 

* 以上三个配置没有默认值,必须要给出具体的配置。
* dubbo.scan.basePackages 的值是开发的代码中含有 com.alibaba.dubbo.config.annotation.Service 和  com.alibaba.dubbo.config.annotation.Reference 注解所在的包。多个包之间用逗号隔开。
* dubbo.registry.address 的值前缀必须是一个 **edas://** 开头,后面的ip地址和端口指的是轻量版配置中心
  1. 开发并启动 Spring Boot 入口类

    package com.alibaba.edas.boot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DubboProvider {
    
        public static void main(String[] args) {
    
            SpringApplication.run(DubboProvider.class, args);
        }
    
    }
  2. 登录轻量版配置中心控制台 http://127.0.0.1:8080,在左侧导航栏中单击服务列表 ,查看提供者列表。可以看到服务提供者里已经包含了 com.alibaba.edas.IHelloService,且可以查询该服务的服务分组和提供者 IP。

创建服务消费者

  1. 创建一个 Spring Boot 工程,命名为 spring-boot-dubbo-consumer。

    这里我们以 Spring Boot 2.0.6.RELEASE 为例,在 pom.xml 文件中加入如下内容。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.edas</groupId>
            <artifactId>edas-dubbo-extension</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    
    </dependencies>

    如果您需要选择使用 Spring Boot 1.x 的版本,请使用 Spring Boot 1.5.x 版本,对应的 com.alibaba.boot:dubbo-spring-boot-starter 版本为 0.1.0。

    说明: Spring Boot 1.x 版本的生命周期即将在 2019 年 8 月 结束,推荐使用新版本开发您的应用。

  2. 开发 Dubbo 消费者

    2.1 在服务消费方,需要引入所有以接口形式暴露的服务接口。例如这里 IHelloService 接口。

      package com.alibaba.edas.boot;
    
    public interface IHelloService {
     String sayHello(String str);
    }

2.2 Dubbo 服务调用。例如需要在 Controller 中调用一次远程 Dubbo 服务,开发的代码如下所示:

package com.alibaba.edas.boot;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
 public class DemoConsumerController {
 
     @Reference
     private IHelloService demoService;
 
     @RequestMapping("/sayHello/{name}")
     public String sayHello(@PathVariable String name) {
         return demoService.sayHello(name);
     }
 }

说明:这里的 Reference 注解是 com.alibaba.dubbo.config.annotation.Reference 。

2.3 配置 Dubbo 服务。在 application.properties/application.yaml 配置文件中新增以下配置:

dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=edas://127.0.0.1:8080
    
**说明:** 

* 以上两个配置没有默认值,必须要给出具体的配置。
* dubbo.registry.address 的值前缀必须是一个 **edas://** 开头,后面的ip地址和端口指的是轻量版配置中心
  1. 开发并启动 Spring Boot 入口类

    package com.alibaba.edas.boot;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DubboConsumer {
    
        public static void main(String[] args) {
    
            SpringApplication.run(DubboConsumer.class, args);
        }
    
    }
  2. 登录轻量版配置中心控制台 http://127.0.0.1:8080,在左侧导航栏中单击 服务列表 ,再在服务列表页面选择 调用者列表 ,可以看到包含了 com.alibaba.edas.IHelloService,且可以查看该服务的服务分组和调用者 IP。

结果验证

  • 本地结果验证

curl http://localhost:17080/sayHello/EDAS

Hello, EDAS (from Dubbo with Spring Boot)

  • EDAS 部署结果验证

curl http://localhost:8080/sayHello/EDAS

Hello, EDAS (from Dubbo with Spring Boot)

相关实践学习
微服务实战-服务注册中心 - Nacos
Nacos是阿里巴巴于2018年7月发布的一个开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持几乎所有主流类型的服务的发现、配置和管理: Kubernetes Service&nbsp; gRPC &amp; Dubbo RPC Service&nbsp; Spring Cloud RESTful Service &nbsp;
相关文章
|
6月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
6960 89
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
7月前
|
安全 数据可视化 Java
AiPy开发的 Spring 漏洞检测神器,未授权访问无所遁形
针对Spring站点未授权访问问题,现有工具难以检测如Swagger、Actuator等组件漏洞,且缺乏修复建议。全新AI工具基于Aipy开发,具备图形界面,支持一键扫描常见Spring组件,自动识别未授权访问风险,按漏洞类型标注并提供修复方案,扫描结果可视化展示,支持导出报告,大幅提升渗透测试与漏洞定位效率。
|
8月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
609 0
|
8月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
1407 0
|
8月前
|
存储 NoSQL Java
探索Spring Boot的函数式Web应用开发
通过这种方式,开发者能以声明式和函数式的编程习惯,构建高效、易测试、并发友好的Web应用,同时也能以较小的学习曲线迅速上手,因为这些概念与Spring Framework其他部分保持一致性。在设计和编码过程中,保持代码的简洁性和高内聚性,有助于维持项目的可管理性,也便于其他开发者阅读和理解。
235 0
|
10月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1274 1
|
10月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
1048 0

热门文章

最新文章