不只简化了 Dubbo 基于 xml 配置的方式,也提升了平常开发效率,甚至提高了工做幸福感。html
为了节省亲爱的读者您的时间,请根据如下2点提示来阅读本文,以提升您的阅读收获效率哦。java
若是您只有简单的 Java 基础和 Maven 经验,而不熟悉 Dubbo,本文档将帮助您从零开始使用 Spring Boot 开发 Dubbo 服务,并使用 EDAS 服务注册中心实现服务注册与发现。web
若是您熟悉 Dubbo,能够选择性地阅读相关章节。spring
Spring Boot 使用极简的一些配置,就能快速搭建一个基于 Spring 的应用,提升的平常的开发效率。所以,若是您使用 Spring Boot 来开发基于 Dubbo 的应用,简化了 Bubbo 基于 xml 配置的方式,提升了平常开发效率,提高了工做幸福感。apache
EDAS 服务注册中心实现了 Dubbo 所提供的 SPI 标准的注册中心扩展,可以完整地支持 Dubbo 服务注册、路由规则、配置规则功能。安全
EDAS 服务注册中心可以彻底代替 ZooKeeper 和 Redis,做为您 Dubbo 服务的注册中心。同时,与 ZooKeeper 和 Redis 相比,还具备如下优点:app
为了便于本地开发,EDAS 提供了一个包含了 EDAS 服务注册中心基本功能的轻量级配置中心。基于轻量级配置中心开发的应用无需修改任何代码和配置就能够部署到云端的 EDAS 中。运维
请您参考 配置轻量级配置中心 进行下载、启动及配置。推荐使用最新版本。curl
这里咱们以 Spring Boot 2.0.6.RELEASE 为例,在 pom.xml 文件中加入以下内容。maven
```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。
```java
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 配置文件中新增如下配置:
```properties
# 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
```
复制代码
说明:
3.开发并启动 Spring Boot 入口类
```java
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);
}
}
```
复制代码
4.登陆轻量版配置中心控制台 http://127.0.0.1:8080,在左侧导航栏中单击服务列表 ,查看提供者列表。能够看到服务提供者里已经包含了 com.alibaba.edas.IHelloService,且能够查询该服务的服务分组和提供者 IP。
这里咱们以 Spring Boot 2.0.6.RELEASE 为例,在 pom.xml 文件中加入以下内容。
```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 接口。
```java
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
```
复制代码
2.2 Dubbo 服务调用。例如须要在 Controller 中调用一次远程 Dubbo 服务,开发的代码以下所示:
```java
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 配置文件中新增如下配置:
```properties
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=edas://127.0.0.1:8080
```
复制代码
说明:
3.开发并启动 Spring Boot 入口类
```java
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);
}
}
```
复制代码
Hello, EDAS (from Dubbo with Spring Boot)
Hello, EDAS (from Dubbo with Spring Boot)