前几天换工作,到新公司用到了阿里的Dubbo,花了两天的时间去学习,在网上找了很多教程,感觉都不是太详细,所以动手搭了下环境,写了这篇XX。

    有关dubbo的介绍就不多说了,请查阅官方文档:http://dubbo.io/

    本次环境搭建用到的工具:IDEA,maven,zookeeper

    首先介绍下项目的大概情况,首先是一个maven父工程DubboTest,下面有三个子工程DubboConsumer,DubboProvider,DubboCommon。

        DubboTest:总的项目,父工程,需要的依赖都在这里配置。

        DubboConsumer:非web项目,dubbo的消费方。

        DubboProvider:非web项目,dubbo服务提供方。

        DubboCommon:非web项目,打成Jar包,是DubboConsumer和DubboProvider共享的包,里面定义的是公用的接口。

    以上相关的概念就不多做解释了。

    项目代码:https://git.oschina.net/dachengxi/DubboTest.git

    搭建项目:

    1.打开IDEA,New Project,选中Maven项目,不要勾选Create from archetype,点击next,填写GroupId等信息,然后再填写其他的相关信息,这个工程命名DubboTest,是父项目。

    2.进入项目之后,选择新建模块,分别简历三个子项目,过程与上面类似。分别命名为DubboConsumer,DubboProvider,DubboCommon。

    下面分别列出上面的pom文件

    DubboTest pom.xml:

    



    4.0.0

    cheng.xi
    test.dubbo
    pom
    1.0-SNAPSHOT
    
        DubboConsumer
        DubboProvider
        DubboCommon
    

    
        
            junit
            junit
            4.9
        
        
            org.springframework
            spring-core
            4.1.3.RELEASE
        

        
            org.springframework
            spring-test
            4.1.3.RELEASE
        

        
            com.alibaba
            dubbo
            2.5.3
        
        
            com.github.sgroschupf
            zkclient
            0.1
        
    



    DubboConsumer pom.xml:

    



    
        test.dubbo
        cheng.xi
        1.0-SNAPSHOT
    
    4.0.0

    dubbo.consumer

    
        
            cheng.xi
            dubbo.common
            1.0-SNAPSHOT
        
    

    DubboProvider pom.xml:

    



    
        test.dubbo
        cheng.xi
        1.0-SNAPSHOT
    
    4.0.0

    dubbo.provider

    
        
            cheng.xi
            dubbo.common
            1.0-SNAPSHOT
        
    

    

    DubboCommon pom.xml:



    
        test.dubbo
        cheng.xi
        1.0-SNAPSHOT
    
    4.0.0

    dubbo.common
    jar


    3.项目搭建完成之后,就可以开始写代码了。

    首先在DubboCommon项目中编写公共的接口,代码如下:

    

package dubbo.common.hello.service;

/**
 * Created by cheng.xi on 15/4/12.
 */
public interface HelloService {
    public void sayHello();
}

    接着写DubboProvider项目的接口实现,代码如下:


    

package dubbo.provider.hello.service.impl;

import dubbo.common.hello.service.HelloService;

/**
 * Created by cmcc on 15/4/12.
 */
public class HelloServiceImpl implements HelloService {
    @Override
    public void sayHello() {
        System.out.println("这里是Provider");
        System.out.println("HelloWorld Provider!");
    }
}

    

下面是DubboProvider中启动服务的代码:

    

package dubbo.provider.hello.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * Created by cheng.xi on 15/4/12.
 */
public class StartProvider {
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
        context.start();
        System.out.println("这里是dubbo-provider服务,按任意键退出");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

    最后编写DubboConsumer下的调用代码,此处使用单元测试的方式调用,代码如下:

    

package dubbo.consumer.hello.main;

import dubbo.common.hello.service.HelloService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;

/**
 * Created by cheng.xi on 15/4/12.
 */
@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration("/dubbo-consumer.xml")
public class StartConsumer {

    @Autowired
    private HelloService helloService;

    @Test
    public void test(){
        System.out.println("dubbo-consumer服务启动,调用!");
        helloService.sayHello();

    }
}

    4.上面代码已经写好,其中需要用的几个配置文件如下所示:

    dubbo-consumer.xml:

    




    
    

    

    dubbo-provider.xml:

    




    
    
    

    
    


    5.至此项目中的代码编写已经完成,下一步是安装和启动zookeeper,有关过程请自己研究下。

    6.启动好了zookeeper之后,首先运行DubboProvider中的那个main方法,然后运行DubboConsumer中的test()方法。

    这就ok了。