Spring+Dubbo+zookeeper搭建

          因为项目需要,最近在学习Dubbo框架,下面先将自己的一些理解以及使用Dubbo实现的一个demo镜像整理。

Dubbo出现的背景(来自官网介绍)

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进


Spring+Dubbo+zookeeper搭建_第1张图片

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。

此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。

此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。

此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。

此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。




一.Dubbo是什么(来自官网介绍)

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

二.Dubbo能做什么

透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

三.Dubbo的主要构成

Dubbo主要构成包括


Spring+Dubbo+zookeeper搭建_第2张图片

服务提供者(Provider):服务提供者暴露要提供的服务

服务消费者(Consumer):服务消费者负责消费提供者提供的服务

服务注册中心(Registy):服务注册中心可以理解为一个中转站,服务提供者将提供的服务注册的服务注册中心,服务消费者通过注册中心找到需要消费的服务

监控中心(Monitor):监控中心负责监控服务被调用的情况,如服务北调用的次数

调用关系说明:

0. 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。


使用Dubbo有什么好处

        个人理解使用dubbo后主要的好处还是功能解耦,以前可能是很多业务耦合在一起,现在通过这种生产和消费的模式进行解耦,便于以后功能的升级和改造。


项目中用到的技术:Spring 、Dubbo、zookeeper、Maven、Tomcat

一.zookeeper安装

        1.请从官网 下载zookeeper,下载完成后解压到制定目录(本人直接放到C:\zookeeper目录下了)然后找到zookeeper conf目录下的zoo_sample.cfg,将其改为zoo.cfg,因为zookeeper启动时是需要读取zoo.cfg中的配置的。

        2.将zoo.cfg用文本编辑器打开,修改里面dataDir对应的路径指向自己系统中的一个目录(我是在C:\zookeeper目录下新增了一个文件夹),这个目录主要用来存储一个日志信息。

       3.完成上述修改后,可以找到zookeeper bin目录下的zkServer.cmd打开即启动zookeeper


配置Dubbo Admin 该项目主要用监控Dubbo的服务提供者和服务消费者


Spring+Dubbo+zookeeper搭建_第3张图片

在上述搜索框中输入你要查询的服务,如:com.acca.dubbo.service.TestService


Spring+Dubbo+zookeeper搭建_第4张图片

dubbo admin羡慕可以通过网上找一个war进行下载(我是通过github下载dubbo项目,想自己通过Maven打包,发现总是打包失败,无奈自己在网上找了一个war放到了tomcat下)

启动顺序:一定要先启动zookeeper,并保存控制台为打开状态,之后才能启动tomcat


服务提供者

采用eclipse构建Maven项目provider


Spring+Dubbo+zookeeper搭建_第5张图片

POM配置如下:pom内容赋值过来总是出现排版问题,无奈只能提供一个连接 ,请参照此链接中的配置即可

Service:

public interface TestService {

public String say(String name);

}

Service实现类

public class TestServiceImpl implements TestService {

public static final String HELLO = "Hello";

public String say(String name) {

return HELLO + name;

}

}

注册服务

public class TestServiceTest {

public static void main(String[] args) {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

new String[] { "application.xml" });

System.out.println("提供者服务已注册成功");

try {

System.in.read();// 让此程序一直跑,表示一直提供服务

} catch (IOException e) {

e.printStackTrace();

}}}

Spring 配置


Spring+Dubbo+zookeeper搭建_第6张图片

至此服务提供者配置完成


服务消费者

采用eclipse构建Maven项目consumer


Spring+Dubbo+zookeeper搭建_第7张图片

POM配置文件和上述服务提供者的配置文件基本相同,此处不再赘述

服务消费

public class ConsumerAction {

public static void main(String[] args) {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

new String[] { "application.xml" });

TestService testService = (TestService) context.getBean("testService");

String string = testService.say("dubbo");

System.out.println(string);

try {

System.in.read();

} catch (IOException e) {

e.printStackTrace();

}}}

Spring配置


Spring+Dubbo+zookeeper搭建_第8张图片

至此服务消费者开发完成


参考文档:dubbo官网

www.importnew.com/19732.html 

你可能感兴趣的:(Spring+Dubbo+zookeeper搭建)