Dubbo
程序员文章站
2022-04-15 20:29:06
...
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.
上一篇: mybatis3.1分页自动添加总数
下一篇: 关于权限管理的一点小思考