美文网首页分布式
Spring+Dubbo+zookeeper搭建

Spring+Dubbo+zookeeper搭建

作者: 不爱八阿哥 | 来源:发表于2017-03-27 15:00 被阅读671次

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

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

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


    单一应用架构

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

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

    垂直应用架构

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

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

    分布式服务架构

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

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

    流动计算架构

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

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



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

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

    其核心部分包含:

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

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

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

    二.Dubbo能做什么

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

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

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

    三.Dubbo的主要构成

    Dubbo主要构成包括

    服务提供者(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的服务提供者和服务消费者

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

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

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


    服务提供者

    采用eclipse构建Maven项目provider

    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 配置

    至此服务提供者配置完成


    服务消费者

    采用eclipse构建Maven项目consumer


    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配置

    至此服务消费者开发完成

    参考文档:dubbo官网

    www.importnew.com/19732.html 

    相关文章

      网友评论

        本文标题:Spring+Dubbo+zookeeper搭建

        本文链接:https://www.haomeiwen.com/subject/ebkrottx.html