前几天换工作,到新公司用到了阿里的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://github.com/dachengxi/DubboTest
搭建
- 打开IDEA,New Project,选中Maven项目,不要勾选Create from archetype,点击next,填写GroupId等信息,然后再填写其他的相关信息,这个工程命名DubboTest,是父项目。
- 进入项目之后,选择新建模块,分别简历三个子项目,过程与上面类似。分别命名为DubboConsumer,DubboProvider,DubboCommon。有关POM文件内容请参考项目代码中的内容,这里不再贴出来。(主要是因为简书这粘贴太XX)。
- 项目搭建完成之后,就可以开始写代码了。
首先在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.SpringJUnit4ClassRunner;
/**
* Created by cheng.xi on 15/4/12.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/dubbo-consumer.xml")
public class StartConsumer {
@Autowired
private HelloService helloService;
@Test
public void test(){
System.out.println("dubbo-consumer服务启动,调用!");
helloService.sayHello();
}
}
- 上面代码已经写好,其中需要用的几个配置文件如下所示。
dubbo-consumer.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-consumer" />
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<dubbo:reference id="helloService" interface="dubbo.common.hello.service.HelloService" />
</beans>
dubbo-provider.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-provider" />
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<dubbo:protocol name="dubbo" port="20880" />
<bean id="helloService" class="dubbo.provider.hello.service.impl.HelloServiceImpl" />
<dubbo:service interface="dubbo.common.hello.service.HelloService" ref="helloService" />
</beans>
- 至此项目中的代码编写已经完成,下一步是安装和启动zookeeper,有关过程请自己研究下。
- 启动好了zookeeper之后,首先运行DubboProvider中的那个main方法,然后运行DubboConsumer中的test()方法。