Overview
Serving 1,000+ services with 1,000,000,000+ invocations everyday, Dubbo becomes the key part of Alibaba's SOA solution and has been deployed to the whole alibaba.com family:
So, What is Dubbo?
Dubbo [] is a distributed service framework enpowers applications with service import/export capability with high performance RPC.
It's composed of three kernel parts:
- Remoting: a network communication framework provides sync-over-async and request-response messaging.
- Clustering: a remote procedure call abstraction with load-balancing/failover/clustering capabilities.
- Registry: a service directory framework for service registration and service event publish/subscription
Dubbo can:
- Integrate different types of RPC solutions(RMI/Hessian...) with unified behavior by the abstraction layer of RPC
- Support out-of-box, plug-able load balancing and fault tolerance strategies.
- Achieve graceful service upgrade/downgrade with service registry.
Quick Start
![]() | Dubbo also support usage WITHOUT spring, please refer to: API Reference |
Service Provider
(#)
Define the service interface:
DemoService.java
package
com.alibaba.dubbo.demo;
public
interface
DemoService {
String sayHello(String name);
}
|
Provide the service implementation
DemoServiceImpl.java
package
com.alibaba.dubbo.demo.provider;
import
com.alibaba.dubbo.demo.DemoService;
public
class
DemoServiceImpl
implements
DemoService {
public
String sayHello(String name) {
return
"Hello "
+ name;
}
}
|
Setup the spring configuration
provider.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation="http://www.springframework.org/schema/beans
">
<!-- Application name -->
<
dubbo:application
name
=
"hello-world-app"
/>
<!-- registry address, used for service to register itself -->
<
dubbo:registry
address
=
"multicast://224.5.6.7:1234"
/>
<!-- expose this service through dubbo protocol, through port 20880 -->
<
dubbo:protocol
name
=
"dubbo"
port
=
"20880"
/>
<!-- which service interface do we expose? -->
<
dubbo:service
interface
=
"com.alibaba.dubbo.demo.DemoService"
ref
=
"demoService"
/>
<!-- designate implementation -->
<
bean
id
=
"demoService"
class
=
"com.alibaba.dubbo.demo.provider.DemoServiceImpl"
/>
</
beans
>
|
Kick it off with following java code
Provider.java
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public
class
Provider {
public
static
void
main(String[] args)
throws
Exception {
ClassPathXmlApplicationContext context =
new
ClassPathXmlApplicationContext(
new
String[] {
"provider.xml"
});
context.start();
System.out.println(
"Press any key to exit."
);
System.in.read();
}
}
|
Congrats! The DemoService now is exported by dubbo and waiting for incoming requests at port 20880.
Service Consumer
(#)
Setup the spring XML
consumer.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation="http://www.springframework.org/schema/beans
">
<!-- consumer application name -->
<
dubbo:application
name
=
"consumer-of-helloworld-app"
/>
<!-- registry address, used for consumer to discover services -->
<
dubbo:registry
address
=
"multicast://224.5.6.7:1234"
/>
<!-- which service to consume? -->
<
dubbo:reference
id
=
"demoService"
interface
=
"com.alibaba.dubbo.demo.DemoService"
/>
</
beans
>
|
Client side java code.
Consumer.java
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
com.alibaba.dubbo.demo.DemoService;
public
class
Consumer {
public
static
void
main(String[] args)
throws
Exception {
ClassPathXmlApplicationContext context =
new
ClassPathXmlApplicationContext(
new
String[] {
"consumer.xml"
});
context.start();
DemoService demoService = (DemoService)context.getBean(
"demoService"
);
// get service invocation proxy
String hello = demoService.sayHello(
"world"
);
// do invoke!
System.out.println( hello );
// cool, how are you~
}
}
|
For more, please click here for a complete user guide.