欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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:

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

Dubbo 
            
    
    博客分类: 01_云计算 RPC 

So, What is Dubbo?

Dubbo [Dubbo 
            
    
    博客分类: 01_云计算 RPC ] 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 
            
    
    博客分类: 01_云计算 RPC  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.

相关标签: RPC