Project Address:https://gitee.com/mirrors/Dubbo-Spring-Boot-Project
Dubbo Spring Boot Project makes it easy to create Spring Boot application using Dubbo as RPC Framework. What's more , it aslo provides
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.
You can introduce the latest dubbo-spring-boot-starter
to your project by adding the following dependency to your pom.xml
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
If your project failed to resolve the dependency, try to add the following repository:
<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>
If you don't know about Dubbo , please take a few minutes to learn http://dubbo.io/ . After that you could dive deep into dubbo user guide.
Usually , There are two usage scenarios for Dubbo applications , one is Dubbo service(s) provider , another is Dubbo service(s) consumer, thus let's get a quick start on them.
First of all , we suppose an interface as Dubbo RPC API that a service provider exports and a service client consumes :
public interface DemoService {
String sayHello(String name);
}
Service Provider implements DemoService
:
@Service(
version = "1.0.0",
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)";
}
}
then , provides a bootstrap class :
@SpringBootApplication
public class DubboProviderDemo {
public static void main(String[] args) {
SpringApplication.run(DubboProviderDemo.class,args);
}
}
last , configures application.properties
:
# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090
management.port = 9091
# 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
DefaultDemoService
's placeholders( ${dubbo.application.id}
, ${dubbo.protocol.id}
, ${dubbo.registry.id}
) sources from application.properties
.
More details , please refer to Dubbo Provider Sample.
Service consumer requires Spring Beans to reference DemoService
:
@RestController
public class DemoConsumerController {
@Reference(version = "1.0.0",
application = "${dubbo.application.id}",
url = "dubbo://localhost:12345")
private DemoService demoService;
@RequestMapping("/sayHello")
public String sayHello(@RequestParam String name) {
return demoService.sayHello(name);
}
}
then , also provide a bootstrap class :
@SpringBootApplication(scanBasePackages = "com.alibaba.boot.dubbo.demo.consumer.controller")
public class DubboConsumerDemo {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerDemo.class,args);
}
}
last , configures application.properties
:
# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 8080
management.port = 8081
# 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
If DubboProviderDemo
works well , please mark sure Dubbo service(s) is active.
More details , please refer to Dubbo Consumer Sample
Having trouble with Dubbo Spring Boot? We’d like to help!
If you want to try out thr latest features of Dubbo Spring Boot , it can be easily built with the maven wrapper. Your JDK is 1.7 or above.
$ ./mvnw clean install
There are some modules in Dubbo Spring Boot Project , let's take a look at below overview :
The main usage of dubbo-spring-boot-parent
is providing dependencies management for other modules.
dubbo-spring-boot-autoconfigure
uses Spring Boot's @EnableAutoConfiguration
which helps core Dubbo's components to be auto-configured by DubboAutoConfiguration
. It reduces code, eliminates XML configuration.
dubbo-spring-boot-actuator
provides production-ready features (e.g. health checks, endpoints, and externalized configuration).
dubbo-spring-boot-starter
is a standard Spring Boot Starter, which contains dubbo-spring-boot-autoconfigure and dubbo-spring-boot-actuator. It will be imported into your application directly.
The samples project of Dubbo Spring Boot that includes two parts:
Dubbo Service will be exported on localhost with port 12345
.
Dubbo Service will be consumed at Spring WebMVC Controller
.