什么是dubbo
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器
入门demo
服务端
public interface DubboTestAble {
public Integer add(int num1,int num2);
}
public class DubboTest implements DubboTestAble {
@Override
public Integer add(int num1, int num2) {
return num1 + num2 ;
}
}
配置文件
<?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="hello-world-app" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<dubbo:registry address="zookeeper://192.168.1.162:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<bean id="dubbo1" class="cn.zw.dubbo.DubboTest"/>
<dubbo:service interface="cn.zw.dubbo.provider.DubboTestAble" ref="dubbo1"/>
</beans>
提示:在启动之前需要首先配置zookeeper。
消费者
配置文件
<?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="consumer-of-helloworld-app" />
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234" />-->
<dubbo:registry address="zookeeper://192.168.1.162:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="cn.zw.dubbo.provider.DubboTestAble" />
</beans>
java 代码
public class DubboClient {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
context.start();
DubboTestAble demoService = (DubboTestAble)context.getBean("demoService"); // 获取远程服务代理
for(int i = 0 ; i < 10 ; i++){
long start = System.currentTimeMillis();
int result = demoService.add(1,1); // 执行远程方法
System.out.println(" server return : " + result +" ; times: " + (System.currentTimeMillis() - start)); // 显示调用结果
}
}
}
console:
server return : 2 ; times: 240
server return : 2 ; times: 3
server return : 2 ; times: 3
server return : 2 ; times: 2
server return : 2 ; times: 2
server return : 2 ; times: 2
server return : 2 ; times: 3
server return : 2 ; times: 2
server return : 2 ; times: 3
server return : 2 ; times: 3
监控页面(dubbo-admin)
至此结束