Dubbo是什么?

Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

Spring集成

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

Zookeeper集成

Dubbo采用全Zookeeper作为注册中心,服务提供者在此发布服务,服务消费者在此获取需要调用的服务。
有三个项目组成dubbo-api,dubbo-server,dubbo-client组成。

1:dubbo-api项目的结构和代码,只提供了一个接口,供dubbo-server,dubbo-client引用
 
2:dubbo-server的代码和结构
app.java

package zrp.pub.api;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Hello world!
*/
public class App {
@SuppressWarnings("resource")
public static void main(String[] args) {
String configLocation = "spring.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
String[] names = context.getBeanDefinitionNames();
System.out.print("Beans:");
for (String string : names) {
System.out.println(string + ",");
}
System.out.println();
try {
Thread.sleep(1000*60*10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

SayHelloToServiceImpl.java:

package zrp.pub.api.impl;

import org.springframework.stereotype.Service;

import zrp.pub.api.SayHelloToService;

@Service("sayHelloToService")
public class SayHelloToServiceImpl implements SayHelloToService {

public String sayHello(String hello) {
System.out.println("已经收到了,"+hello);
return hello+",你也好啊";
}
}

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="zookeeper://192.168.136.171:2181?backup=192.168.136.171:2182,192.168.136.176:2183" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="zrp.pub.api.SayHelloToService" ref="sayHelloToService" /> <!-- 和本地bean一样实现服务 -->
<!-- <bean id="sayHelloToService" class="zrp.pub.api.impl.SayHelloToServiceImpl" /> spring注释注入-->
</beans>
spring.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:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:annotation-config />
<context:component-scan base-package="zrp.pub.api.impl" />
<aop:aspectj-autoproxy proxy-target-class="true" />
<import resource="/dubbo-provider.xml" />
</beans>
3:dubbo-client的代码和结构
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-client" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="zookeeper://192.168.136.171:2181?backup=192.168.136.171:2182,192.168.136.171:2183" />
<!-- 生成远程服务代理,可以和本地bean一样使用sayHelloToService -->
<dubbo:reference id="sayHelloToService" interface="zrp.pub.api.SayHelloToService"/>
</beans>
App.java:

package zrp.pub;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import zrp.pub.api.SayHelloToService;

/**
* Hello world!
*/
public class App {
@SuppressWarnings("resource")
public static void main(String[] args) {
String configLocation = "dubbo-consumer.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
SayHelloToService sayHelloToService = (SayHelloToService) context.getBean("sayHelloToService");
String resulut = sayHelloToService.sayHello("arui");
System.out.println(resulut);
}
}

代码已经公布在https://github.com/arui3015/dubbo,很简单的一个基于以上三者的远程调用。

标签: Dubbo, JAVA分布式

添加新评论