Apache Dubbo(incubating) Spring Boot Project makes it easy to create Spring Boot application using Dubbo as RPC Framework. What's more, it also provides
- auto-configure features (e.g., annotation-driven, auto configuration, externalized configuration).
- production-ready features (e.g., security, health checks, externalized configuration).
Apache Dubbo (incubating) |ˈdʌbəʊ| is a high-performance, light weight, java based RPC framework. Dubbo offers three key functionalities, which include interface based remote call, fault tolerance & load balancing, and automatic service registration & discovery.
You can introduce the latest dubbo-spring-boot-starter
to your project by adding the following dependency to your pom.xml
<properties>
<spring-boot.version>2.1.1.RELEASE</spring-boot.version>
<dubbo.version>2.7.0</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>
<!-- Apache Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
</dependencies>
If your project failed to resolve the dependency, try to add the following repository:
<repositories>
<repository>
<id>apache.snapshots.https</id>
<name>Apache Development Snapshot Repository</name>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
If you'd like to attempt to experience latest features, you also can build from source as follow:
- Maven install current project in your local repository.
Maven install =
mvn install
If you don't know about Dubbo, please take a few minutes to learn http://dubbo.apache.org/. 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") public class DefaultDemoService implements DemoService { /** * The default value of ${dubbo.application.name} is ${spring.application.name} */ @Value("${dubbo.application.name}") private String serviceName; public String sayHello(String name) { return String.format("[%s] : Hello, %s", serviceName, name); } }
-
Provides a bootstrap class
@EnableAutoConfiguration public class DubboProviderDemo { public static void main(String[] args) { SpringApplication.run(DubboProviderDemo.class,args); } }
-
Configures the
application.properties
:# Spring boot application spring.application.name=dubbo-auto-configuration-provider-demo # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service dubbo.scan.base-packages=org.apache.dubbo.spring.boot.demo.provider.service # Dubbo Application ## The default value of dubbo.application.name is ${spring.application.name} ## dubbo.application.name=${spring.application.name} # Dubbo Protocol dubbo.protocol.name=dubbo dubbo.protocol.port=12345 ## Dubbo Registry dubbo.registry.address=N/A
-
Service consumer also provides a bootstrap class to reference
DemoService
@EnableAutoConfiguration public class DubboAutoConfigurationConsumerBootstrap { private final Logger logger = LoggerFactory.getLogger(getClass()); @Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345") private DemoService demoService; public static void main(String[] args) { SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close(); } @Bean public ApplicationRunner runner() { return args -> { logger.info(demoService.sayHello("mercyblitz")); }; } }
-
configures
application.yml
spring: application: name: dubbo-auto-configure-consumer-sample
If DubboProviderDemo
works well, please mark sure DubboProviderDemo
is started.
More details, please refer to Samples.
Having trouble with Dubbo Spring Boot? We’d like to help!
- If you are upgrading, read the release notes for upgrade instructions and "new and noteworthy" features.
- Ask a question - You can subscribe Dubbo User Mailling List.
- Report bugs at github.com/dubbo/dubbo-spring-boot-project/issues.
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.8 or above.
$ ./mvnw clean install
There are some modules in Apache 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: