Dubbo Spring Boot 工程致力于简化 Dubbo RPC 框架在 Spring Boot 应用场景的开发。同时也整合了 Spring Boot 特性:
Dubbo |ˈdʌbəʊ| is a high-performance, java based RPC 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.
您可以为您的工程引入最新 dubbo-spring-boot-starter
的发布,增加以下依赖到工程的 pom.xml
文件中:
<properties> <spring-boot.version>2.1.1.RELEASE</spring-boot.version> <dubbo.version>2.6.5</dubbo.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Dubbo dependencies --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </dependency> </dependencies>
如果您的工程遇到了依赖问题, 请尝试添加如下 Maven 参考到工程的 pom.xml
文件中:
<repositories> <repository> <id>sonatype-nexus-snapshots</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
从现在开始, dubbo-spring-boot-project
将在每个发布中发行两个版本 :
如果你需要尝试最新 dubbo-spring-boot-project
的特性,您可将当前工程手动 Maven install 到本地 Maven 仓库:
Maven install =
mvn install
versions | Java | Spring Boot | Dubbo |
---|---|---|---|
0.2.1 | 1.8+ | 2.1.x | 2.6.5 + |
0.1.1 | 1.7+ | 1.5.x | 2.6.5 + |
如果您对 Dubbo 不是非常了解,耽误您几分钟访问 http://dubbo.apache.org/ 。了解后,如果你期望更深入的探讨,可以移步用户手册。
通常情况 , Dubbo 应用有两种使用场景 , 其一为 Dubbo 服务提供方 , 另外一个是 Dubbo 服务消费方,当然也允许两者混合,下面我们一起快速开始!
首先,我们假设存在一个 Dubbo RPC API ,由服务提供方为服务消费方暴露接口 :
public interface DemoService { String sayHello(String name); }
DemoService
接口@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)"; } }
@SpringBootApplication public class DubboProviderDemo { public static void main(String[] args) { new SpringApplicationBuilder(DubboProviderDemo.class) .web(false) // 非 Web 应用 .run(args); } }
application.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 服务提供方示例.
@Reference
注入 DemoService
:@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); } }
@SpringBootApplication(scanBasePackages = "com.alibaba.boot.dubbo.demo.consumer.controller") public class DubboConsumerDemo { public static void main(String[] args) { SpringApplication.run(DubboConsumerDemo.class,args); } }
application.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 中遇到任何问题或者有什么建议? 我们非常需要您的支持!
Dubbo Spring Boot 采用多 Maven 模块工程 , 模块如下:
dubbo-spring-boot-parent 模块主要管理 Dubbo Spring Boot 工程的 Maven 依赖
dubbo-spring-boot-autoconfigure 模块提供 Spring Boot's @EnableAutoConfiguration
的实现 - DubboAutoConfiguration
, 它简化了 Dubbo 核心组件的装配。
dubbo-spring-boot-actuator 提供 Production-Ready 特性:
dubbo-spring-boot-starter 模块为标准的 Spring Boot Starter , 当您将它引入到工程后,dubbo-spring-boot-autoconfigure 模块会一同被间接依赖。
示例工程包含以下项目: