如何使用 Spring Boot 开发 Dubbo 应用? -问答-阿里云开发者社区-阿里云

开发者社区> 小天使爱美> 正文

如何使用 Spring Boot 开发 Dubbo 应用?

2020-03-27 11:50:29 411 2

如何使用 Spring Boot 开发 Dubbo 应用?

取消 提交回答
全部回答(2)
  • 小天使爱美
    2020-03-27 12:50:55

    除了可以使用传统的 XML 配置方式开发 Dubbo 应用,还可以使用 Spring Boot 开发 Dubbo 应用,特别对于 Java 技术薄弱和 Maven 经验少,且又不熟悉 Dubbo 框架的开发者更为适合。本文以全新开发过程,向您展示如何使用 Spring Boot 开发 Dubbo 应用,并使用 SAE 服务注册中心实现服务注册与发现。

    前提条件 下载 Maven并设置环境变量。 下载最新版本的 Nacos Server。 启动 Nacos Server。

    解压下载的 Nacos Server 压缩包 进入nacos/bin目录,启动 Nacos Server。 Linux/Unix/Mac 系统:执行命令sh startup.sh -m standalone。 Windows 系统:双击执行startup.cmd文件。 在本地开发应用时,可以使用 Alibaba Cloud Toolkit 插件实现本地应用和部署在 EDAS 中的应用的相互调用,即端云互联,而无需搭建 VPN,帮助您提升开发效率。详情请参见为 EDAS 应用设置端云互联。

    为什么使用 Spring Boot 开发 Dubbo 应用 Spring Boot 简化了微服务应用的配置和部署,同时 Nacos 又同时提供了服务注册发现和配置管理功能,两者结合的方式能够帮助您快速搭建基于 Spring 的 Dubbo 服务,相比 xml 的开发方式,大幅提升开发效率。

    全新场景使用 Spring Boot 开发 Dubbo 应用有两种主要的方式:

    使用 xml 开发。 使用 Spring Boot 的注解方式开发。 使用 xml 方式请参考将 Dubbo 应用托管到 SAE。文本档介绍如何使用 Spring Boot 的注解方式开发 Dubbo 服务。

    视频教程 本视频仅介绍使用 Spring Boot 开发 Dubbo 应用,部署部分请参见在SAE控制台部署应用。

    示例工程 您可以按照本文的逐步搭建工程,也可以选择直接下载本文对应的示例工程,或者使用 Git 来 clone: git clone https://github.com/aliyun/alibabacloud-microservice-demo.git

    该项目包含了众多了示例工程,本文对应的示例工程位于 alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot。

    创建服务提供者 创建命名为spring-boot-dubbo-provider的 Maven 工程。 在pom.xml文件中添加所需的依赖。 这里以 Spring Boot 2.0.6.RELEASE 为例。

    org.springframework.boot spring-boot-dependencies 2.0.6.RELEASE pom import

    org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-actuator org.apache.dubbo dubbo-spring-boot-starter 2.7.3 com.alibaba.nacos nacos-client 1.1.1
    开发 Dubbo 服务提供者。 Dubbo 中服务都是以接口的形式提供的。 在src/main/java路径下创建一个 package com.alibaba.edas.boot。 在com.alibaba.edas.boot下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。 package com.alibaba.edas.boot; public interface IHelloService { String sayHello(String str); }
    在com.alibaba.edas.boot下创建一个类IHelloServiceImpl,实现此接口。 package com.alibaba.edas.boot; import com.alibaba.dubbo.config.annotation.Service; @Service public class IHelloServiceImpl implements IHelloService { public String sayHello(String name) { return "Hello, " + name + " (from Dubbo with Spring Boot)"; } }
    说明 这里的 Service 注解是 Dubbo 提供的一个注解类,类的全名称为:com.alibaba.dubbo.config.annotation.Service 。 配置 Dubbo 服务。 在 src/main/resources路径下创建application.properties或application.yaml文件并打开。 在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=nacos://127.0.0.1:8848
    说明 以上三个配置没有默认值,必须要给出具体的配置。 dubbo.scan.basePackages的值是开发的代码中含有com.alibaba.dubbo.config.annotation.Service和com.alibaba.dubbo.config.annotation.Reference注解所在的包。多个包之间用逗号隔开。 dubbo.registry.address的值前缀必须以 nacos:// 开头,后面的 IP 地址和端口指的是 Nacos Server 的地址。代码示例中为本地地址,如果您将 Nacos Server 部署在其它机器上,请修改为实际的 IP 地址。 开发并启动 Spring Boot 入口类DubboProvider。 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);
        }
    
    }                        
    

    登录 Nacos 控制台 http://127.0.0.1:8848,在左侧导航栏中单击服务列表 ,查看提供者列表。 可以看到服务提供者里已经包含了com.alibaba.edas.boot.IHelloService,且可以查询该服务的服务分组和提供者 IP。 创建服务消费者 创建一个 Maven 工程,命名为spring-boot-dubbo-consumer。 在pom.xml文件中添加相关依赖。 这里以 Spring Boot 2.0.6.RELEASE 为例。 org.springframework.boot spring-boot-dependencies 2.0.6.RELEASE pom import

    org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-actuator org.apache.dubbo dubbo-spring-boot-starter 2.7.3 com.alibaba.nacos nacos-client 1.1.1


    如果您需要选择使用 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 月 结束,推荐使用新版本开发您的应用。 开发 Dubbo 消费者。 在src/main/java路径下创建 package com.alibaba.edas.boot。 在com.alibaba.edas.boot下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。 package com.alibaba.edas.boot;

    public interface IHelloService { String sayHello(String str); }
    开发 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 。 在application.properties/application.yaml配置文件中新增以下配置。 dubbo.application.name=dubbo-consumer-demo dubbo.registry.address=nacos://127.0.0.1:8848
    说明 以上两个配置没有默认值,必须要给出具体的配置。 dubbo.registry.address的值前缀必须以 nacos:// 开头,后面的 IP 地址和端口为 Nacos Server 的地址。代码示例中为本地地址,如果您将 Nacos Server 部署在其它机器上,请修改为实际的 IP 地址。 开发并启动 Spring Boot 入口类DubboConsumer。 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);
    }
    

    }
    登录 Nacos 控制台 http://127.0.0.1:8848,在左侧导航栏中单击服务列表,再在服务列表页面单击调用者列表页签,查看调用者列表。 可以看到包含了com.alibaba.edas.boot.IHelloService,且可以查看该服务的服务分组和调用者 IP。 结果验证 curl http://localhost:8080/sayHello/EDAS

    Hello, EDAS (from Dubbo with Spring Boot)
    部署到 SAE 本地使用 Nacos 作为注册中心的应用,可以直接部署到 SAE 中,无需做任何修改,注册中心会被自动替换为 SAE上的注册中心。

    您可以根据实际需求选择部署途径(控制台或工具),详情请参见应用部署概述。

    使用控制台部署前,请参见如下操作将应用程序编译为可运行的JAR包、WAR包。

    在pom.xml文件中添加以下打包插件的配置。 Provider org.springframework.boot spring-boot-maven-plugin repackage spring-boot com.alibaba.edas.boot.DubboProvider
    Consumer org.springframework.boot spring-boot-maven-plugin repackage spring-boot com.alibaba.edas.boot.DubboConsumer
    执行 mvn clean package 将本地的程序打成 JAR 包。 更多信息 除 Spring Boot 外,还可以通过 XML 的方式开发 Dubbo 微服务应用,详情请参见将 Dubbo 应用托管到 SAE。 应用部署到 SAE 后,您可以对应用进行管理、绑定 SLB 等操作。 应用部署 应用管理 监控管理 日志管理

    0 0
添加回答
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144301浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 223050浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333925浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142151浏览量 回答数 13

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 292344浏览量 回答数 110

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146812浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 643237浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145652浏览量 回答数 31

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136146浏览量 回答数 10

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302641浏览量 回答数 249
0
文章
3151
问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载