# Dubbo-Spring-Boot-Project
**Repository Path**: jinghua81/Dubbo-Spring-Boot-Project
## Basic Information
- **Project Name**: Dubbo-Spring-Boot-Project
- **Description**: Dubbo Spring Boot Project 致力于简化 Dubbo 应用在 Spring Boot 环境中的开发,主要包括自动装配(Auto-Configure)、外部化配
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 28
- **Created**: 2018-06-23
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Dubbo Spring Boot 工程
[](https://travis-ci.org/apache/incubator-dubbo-spring-boot-project)
[](https://codecov.io/gh/apache/incubator-dubbo-spring-boot-project)
[](https://gitter.im/alibaba/dubbo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)


[Dubbo](https://github.com/alibaba/dubbo) Spring Boot 工程致力于简化 Dubbo RPC 框架在
[Spring Boot](https://github.com/spring-projects/spring-boot/) 应用场景的开发。同时也整合了 Spring Boot 特性:
* [自动装配](dubbo-spring-boot-autoconfigure) (比如: 注解驱动, 自动装配等).
* [Production-Ready](dubbo-spring-boot-actuator) (比如: 安全, 健康检查, 外部化配置等).
> Dubbo *|ˈdʌbəʊ|* is a high-performance, java based [RPC](https://en.wikipedia.org/wiki/Remote_procedure_call) framework open-sourced by Alibaba. As in many RPC systems, dubbo is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. On the server side, the server implements this interface and runs a dubbo server to handle client calls. On the client side, the client has a stub that provides the same methods as the server.
## [English README](README_CN.md)
## 已发行版本
您可以为您的工程引入最新 `dubbo-spring-boot-starter` 的发布,增加以下依赖到工程的 `pom.xml` 文件中:
```xml
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
```
如果您的工程遇到了依赖问题, 请尝试添加如下 Maven 参考到工程的 `pom.xml` 文件中:
```xml
sonatype-nexus-snapshots
https://oss.sonatype.org/content/repositories/snapshots
false
true
```
## 开发版本
从现在开始, `dubbo-spring-boot-project` 将在每个发布中发行两个版本 :
* [`0.2.x`](https://github.com/apache/incubator-dubbo-spring-boot-project) 是支持 Spring Boot 2.x 的主要版本(推荐,长期维护)
* [`0.1.x`](https://github.com/apache/incubator-dubbo-spring-boot-project/tree/0.1.x) 是支持 Spring Boot 1.x 的维护版本(兼容,短期维护)
### 源代码构建
如果你需要尝试最新 `dubbo-spring-boot-project` 的特性,您可将当前工程手动 Maven install 到本地 Maven 仓库:
1. Maven install 当前工程
> Maven install = `mvn install`
### 依赖关系
| 版本 | Java | Spring Boot | Dubbo |
| -------- | ----- | ----------------- | ---------- |
| `0.2.0` | 1.8+ | `2.0.x` | `2.6.2`+ |
| `0.1.1` | 1.7+ | `1.5.x` | `2.6.2`+ |
## 快速开始
如果您对 Dubbo 不是非常了解,耽误您几分钟访问 http://dubbo.apache.org/ 。了解后,如果你期望更深入的探讨,可以移步[用户手册](http://dubbo.apache.org/books/dubbo-user-book/)。
通常情况 , Dubbo 应用有两种使用场景 , 其一为 Dubbo 服务提供方 , 另外一个是 Dubbo 服务消费方,当然也允许两者混合,下面我们一起快速开始!
首先,我们假设存在一个 Dubbo RPC API ,由服务提供方为服务消费方暴露接口 :
```java
public interface DemoService {
String sayHello(String name);
}
```
### 实现 Dubbo 服务提供方
1. 实现 `DemoService` 接口
```java
@Service(
version = "${demo.service.version}",
application = "${dubbo.application.id}",
protocol = "${dubbo.protocol.id}",
registry = "${dubbo.registry.id}"
)
public class DefaultDemoService implements DemoService {
public String sayHello(String name) {
return "Hello, " + name + " (from Spring Boot)";
}
}
```
2. 编写 Spring Boot 引导程序
```java
@SpringBootApplication
public class DubboProviderDemo {
public static void main(String[] args) {
new SpringApplicationBuilder(DubboProviderDemo.class)
.web(false) // 非 Web 应用
.run(args);
}
}
```
3. 配置 `application.properties` :
```properties
# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090
management.port = 9091
# Service version
demo.service.version = 1.0.0
# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages = com.alibaba.boot.dubbo.demo.provider.service
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = N/A
```
更多的实现细节 , 请参考 [Dubbo 服务提供方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-provider).
### 实现 Dubbo 服务消费方
1. 通过 `@Reference` 注入 `DemoService` :
```java
@RestController
public class DemoConsumerController {
@Reference(version = "${demo.service.version}",
application = "${dubbo.application.id}",
url = "dubbo://localhost:12345")
private DemoService demoService;
@RequestMapping("/sayHello")
public String sayHello(@RequestParam String name) {
return demoService.sayHello(name);
}
}
```
2. 编写 Spring Boot 引导程序(Web 应用) :
```java
@SpringBootApplication(scanBasePackages = "com.alibaba.boot.dubbo.demo.consumer.controller")
public class DubboConsumerDemo {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerDemo.class,args);
}
}
```
3. 配置 `application.properties` :
```properties
# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 8080
management.port = 8081
# Service Version
demo.service.version = 1.0.0
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
```
请确保 Dubbo 服务提供方服务可用, `DubboProviderDemo` 运行方可正常。
更多的实现细节,请参考 [Dubbo 服务消费方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-consumer)
## 社区交流
如果您在使用 Dubbo Spring Boot 中遇到任何问题或者有什么建议? 我们非常需要您的支持!
- 如果您需要升级版本,请提前阅读[发布公告](https://github.com/dubbo/dubbo-spring-boot-project/releases),了解最新的特性和问题修复。
- 如果您遇到任何问题 ,您可以加入官方 [Google 讨论组](https://groups.google.com/group/dubbo) , 或者订阅 [Dubbo 用户邮件列表](mailto:dubbo+subscribe@googlegroups.com)。
- 问题反馈,您可以在 [issues](https://github.com/dubbo/dubbo-spring-boot-project/issues) 提出您遇到的使用问题。
## 模块工程
Dubbo Spring Boot 采用多 Maven 模块工程 , 模块如下:
### [dubbo-spring-boot-parent](dubbo-spring-boot-parent)
[dubbo-spring-boot-parent](dubbo-spring-boot-parent) 模块主要管理 Dubbo Spring Boot 工程的 Maven 依赖
### [dubbo-spring-boot-autoconfigure](dubbo-spring-boot-autoconfigure)
[dubbo-spring-boot-autoconfigure](dubbo-spring-boot-autoconfigure) 模块提供 Spring Boot's `@EnableAutoConfiguration` 的实现 - `DubboAutoConfiguration`,
它简化了 Dubbo 核心组件的装配。
### [dubbo-spring-boot-actuator](dubbo-spring-boot-actuator)
[dubbo-spring-boot-actuator](dubbo-spring-boot-actuator) 提供 Production-Ready 特性:
* [健康检查](dubbo-spring-boot-actuator#health-checks)
* [控制断点](dubbo-spring-boot-actuator#endpoints)
* [外部化配置](dubbo-spring-boot-actuator#externalized-configuration))
### [dubbo-spring-boot-starter](dubbo-spring-boot-starter)
[dubbo-spring-boot-starter](dubbo-spring-boot-starter) 模块为标准的 Spring Boot Starter ,
当您将它引入到工程后,[dubbo-spring-boot-autoconfigure](dubbo-spring-boot-autoconfigure) 模块会一同被间接依赖。
### [dubbo-spring-boot-samples](dubbo-spring-boot-samples)
The samples project of Dubbo Spring Boot that includes two parts:
[dubbo-spring-boot-samples](dubbo-spring-boot-samples) 为 Dubbo Spring Boot 示例工程,包括:
#### [Dubbo 服务提供方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-provider)
Dubbo 服务将会通过 localhost 的 `12345` 端口暴露服务,并且提供 JMX Endpoints。
#### [Dubbo 服务消费方示例](dubbo-spring-boot-samples/dubbo-spring-boot-sample-consumer)
Dubbo 服务将被 Spring WebMVC `Controller` 消费,并且提供 JMX 以及 Web Endpoints 端口:
* 示例 `Controller` : http://localhost:8080/sayHello?name=HelloWorld
* [健康检查](dubbo-spring-boot-actuator#health-checks) : http://localhost:8081/health
* [Dubbo Endpoints](dubbo-spring-boot-actuator#endpoints) : http://localhost:8081/dubbo