博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo+zookeeper 最简单的分布式搭建
阅读量:2157 次
发布时间:2019-05-01

本文共 1638 字,大约阅读时间需要 5 分钟。

介绍:本例采用 dubbo+zookeeper 搭建分布式系统,环境 jdk1.8


运行介绍:启动 zookeeper - 启动服务提供者 - 启动服务消费者

整个项目的代码已上传到github,,欢迎查看。


分布式架构:

1.当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,前端应用能更快速的响应多变的市场需求。
2.此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。

Dubbo 是什么

  • 一款分布式服务框架
  • 高性能和透明化的RPC远程服务调用方案
  • SOA服务治理方案

Dubbo 架构流程图

这里写图片描述

Provider:服务提供方

Consumer:服务消费者
Registry:注册中心
Monitor:统计服务调用次数和调用时间的监控中心

调用流程

0.启动服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

注册中心

服务提供方:针对所提供的服务到注册中心发布。
服务消费方:到服务中心订阅所需的服务。
对于任何一方,不论服务提供方或者服务消费方都有可能同时兼具两种角色,即需要提供服务也需要消费服务。

架构搭建案例

1.zookpeeper 安装

把包下载后,解压到目录,例如:D:\software\work\zookeeper (解压后更名为zookeeper)

修改zoo_sample.cfg 文件名(D:\software\work\zookeeper\conf) 为 zoo.cfg
主要更改配置文件里面的日志目录,如下:
dataDir=D:\zookeeper\data
dataLogDir=D:\zookeeper\log

启动

进入到bin目录,并且启动zkServer.cmd,如图:
zookeeper运行效果

2.创建maven工程

工程分为4个结构

  • dubbo 工程,主工程,主要导入公共jar包等
  • dubbo-api 工程,公共接口
  • dubbo-provider 工程,服务提供者
  • dubbo-consumer-user 和 dubbo-consumer 工程,服务消费者
    项目结构

(注:每个工程都是独立的,通过maven 引入父子关系)

1.创建dubbo 的maven 主工程
创建步骤省略,主要导入相关jar包等,具体请查看给到源码的pom.xml,此工程暂仅配置pom.xml,没有其他操作

2.创建dubbo-api 的maven 接口工程

主要定义接口,并配置好pom.xml
api工程目录user接口

3.创建dubbo-provider 的maven 工程

服务提供者,实现公共接口的实现,此实现对消费者隐藏

加入公共接口所在的依赖

工程依赖
接口实现
user实现
用Spring配置声明服务
Spring声明服务
服务者启动(前提启动 zookeeper)
服务者启动

4.创建dubbo-consumer-user 的maven 工程(可以有多个consumer,配置跟上)

服务消费者,实现公共接口的实现,调用服务

通过Spring引用服务

服务引用
启动consumer ,调用服务
调用服务

5.运行项目,顺序:zookeeper –> dubbo-provider –> dubbo-consumer-user

运行结果

运行结果

3.dubbo-admin 搭建

提供界面化管理dubbo 服务

下载地址

下载后把war包放入tomcat的webapps目录下,启动tomcat

浏览器输入:

默认账号: root 密码:root

效果图:

服务列表
dubbo-admin
服务详细
dubbo-admin

整个项目的代码已上传到github,,欢迎查看。

你可能感兴趣的文章
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>