1. 概述
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点:
那么,Dubbo是什么?
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
主要核心部件
1、Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.
2、RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
3、Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。
二、实例介绍
1、项目的目录结构: server端和client端
2、代码介绍:
server端: server-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="hello-world-zxn" />
<!-- 本机 伪集群 测试 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2183,127.0.0.1:2184" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.zxn.dubbo.server.interf.sendMessage"
ref="demoService" /> <!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.zxn.dubbo.server.impl.sendMessageImpl" />
</beans>
main.java
package com.zxn.dubbo.server.main;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class main {
public static void main(String[] args) throws IOException{
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-dubboProvider.xml" });
context.start();
System.out.println("按任意键退出");
System.in.read();
}
}
其他名外两个就是 接口和实现类的文件,这里不再赘述;可以下载我的git文件下来,路径文末尾
client端: 客户端需要引入server的包,这样才能调用它的接口进行实现
client.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="consumer-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2183,127.0.0.1:2184" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.zxn.dubbo.server.interf.sendMessage" />
</beans>
client的main.java
package com.zxn.dubbo.client.main;
import java.util.Date;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zxn.dubbo.server.interf.sendMessage;
public class Main {
public static void main(String [] args) throws InterruptedException{
for(int i=0;i<100;i++){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationConsumer.xml" });
context.start();
sendMessage demoServer = (sendMessage) context.getBean("demoService");
System.out.println("client:"+demoServer.sendInformation(" zxn "+new Date()));
Thread.sleep(3000);
}
}
}
1.先启动 zookeeper 集群
备注:
zookerper集群搭建地址:
该项目的git仓库地址:
一篇比较好的博文学习地址: http://blog.csdn.net/morning99/article/details/40426781