一、概述
Dubbo是阿里爸爸SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,广泛应用于阿里巴巴集团的各成员站点。
二、Dubbo能啥?
- 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
- 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
- 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
三、Demo示例代码
1、服务提供者基于spring的dubbo配置(dubbo.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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="bms-facade"/>
<!-- 使用multicast广播注册中心暴露服务地址
<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<!-- 使用zookeeper注册中心暴露服务地址,禁用订阅配置(只注册) -->
<dubbo:registry id="zookeeper1" address="zookeeper://127.0.0.1:2181" subscribe="false" />
<dubbo:registry id="zookeeper2" address="zookeeper://127.0.0.1:2185" default="false" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<dubbo:annotation package="org.bms.facade" />
<!-- 声明要暴露的服务接口
<bean id="testFacade" class="org.bms.facade.TestFacade"></bean>
<dubbo:service interface="org.bms.apis.interfaces.ITest" ref="testFacade" version="0.0.1"/>
-->
</beans>
2、服务提供者
@Service(owner="cyj",cache="",version="0.0.1")
public class TestFacade implements ITest{
@Override
public ResultObj sayHello() {
// TODO Auto-generated method stub
System.out.println("...我是Provider..");
ResultObj rObj = new ResultObj();
rObj.setResultName("你好,我是Provider!");
return rObj;
}
}
3、服务消费者基于spring的dubbo配置(dubbo.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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="bms-controller"/>
<!-- 使用multicast广播注册中心暴露服务地址
<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<!-- 使用zookeeper注册中心暴露服务地址
<dubbo:registry address="zookeeper://127.0.0.1:2181" /> -->
<dubbo:registry id="zookeeper1" address="zookeeper://127.0.0.1:2181" />
<dubbo:registry id="zookeeper2" address="zookeeper://127.0.0.1:2185" default="false" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:reference interface="org.bms.apis.interfaces.ITest" id="iTest" version="0.0.1"/>
</beans>
4、服务消费者
@Controller
@RequestMapping("/test")
public class TestController {
@Resource
private ITest iTest;
@RequestMapping("/index.htm")
public String test(Model model){
ResultObj rObj = (ResultObj) iTest.sayHello();
model.addAttribute("rObj", rObj);
return "/index";
}
}
谨以此文献给没接触过dubbo的初学者,方便大家交流学习。
本人水平有限,写的东西粗俗不堪,如有错漏之处,请大家批评指正。
注:文中许多内容引用dubbo官方介绍文档中的内容,地址为http://dubbo.io/Home-zh.htm
附上源码地址:我的dubbo的demo源码下载地址
附上zookeeper3.4.5下载地址:我的dubbo的demo依赖的zookeeper下载地址