不仅简化了 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;@Servicepublic 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.bootdubbo.application.name=dubbo-provider-demodubbo.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;@RestControllerpublic class DemoConsumerController {@Referenceprivate 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)

高效开发 Dubbo?用 Spring Boot 可得劲!相关推荐

  1. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

  2. Spring Boot快速开发利器:Spring Boot CLI

    Spring Boot CLI(Command Line Interface)是一个命令行工具,您可以用它来快速构建Spring原型应用.通过Spring Boot CLI,我们可以通过编写Groov ...

  3. 快速开发一个自定义 Spring Boot Starter ,希望你也会

    来源:http://t.cn/Ai9li9fC 众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为 ...

  4. 后端开发实践:Spring Boot项目模板

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 作者 ...

  5. 后端开发实践:Spring Boot项目模板,拿去用吧!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 作者:无知者 ...

  6. 开发第一个spring boot应用

    为什么80%的码农都做不了架构师?>>>    我们来用spring boot开发一个简单的"hello world"web应用,使用maven构建.开始之前,先 ...

  7. apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

    VsCode搭建Java开发环境(Spring Boot项目创建.运行.调试) 安装如下两个主要扩展即可,这两个扩展已关联java项目开发主要使用的maven.springboot等所需要的扩展. 开 ...

  8. VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

    本文转载自:https://www.cnblogs.com/miskis/p/9816135.html 安装如下两个主要扩展即可,这两个扩展已关联java项目开发主要使用的maven.springbo ...

  9. 慕了!17年阿里Java开发大佬把Spring Boot的精髓都总结出来了

    目前ssm框架还是比较常用的,其中的ss指的无非就是Spring 和 SpringMVC,我们可以简单地认为 "Spring Boot ≥ Spring + SpringMVC", ...

最新文章

  1. python随机生成30个8_Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例...
  2. python - django (auth 的使用)
  3. 现代软件工程 第六章 【敏捷流程】练习与讨论
  4. rh php70 php fpm,mac 通过brew安装php70 +php-fpm+ phalcon3.0.3
  5. JS中的数据类型(见《Jquery实战附录》)
  6. 有效值和峰峰值的关系_4.数据预处理—缺失值处理(二)
  7. 执行文件mysql使用source 命令乱码问题
  8. python大鱼吃小鱼程序代码_最近跟导师学Python,熬夜弄了两个晚上写出来个大鱼吃小鱼游戏!...
  9. SpringMVC+MyBatis+MySQL实现分页
  10. LeetCode数据库 180. 连续出现的数字
  11. wifi不断重连报错:eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON解决
  12. GridView控件 Reapter控件 DataList控件 的区别和用法
  13. ActionContext介绍(在Struts2中)
  14. Pandas玩转数据透视表,用它就够了!
  15. 优锘科技:数字孪生如何与新基建摩擦出智慧火花
  16. 亚马逊云科技入门资源中心,从0到1轻松上云
  17. 日本房地产泡沫 Japan Real Estate Bubble
  18. 这一周CSDN人都看了些什么?(5.14-5.20)
  19. 勿以恶小而为之,勿以善小而不为
  20. PHP短信通知+语音播报自动双呼

热门文章

  1. Spring实战之三:高级装配
  2. leetcode算法题--合并区间
  3. mysql 存储过程 百万数据 innodb_详解mysql数据库一键查看锁信息(开启InnoDB监控)...
  4. 基于epoll实现一个IO多路复用的回声服务器
  5. 无服务器计算将会取代容器?
  6. 项目中序列化时,去除属性为null的key
  7. BIG-IP系统进程介绍
  8. 替换index和show中select_tag的方法
  9. 47. Permutations II 1
  10. 项目经理问:为什么总是只有我在加班 – 挂包袱现象