引入

最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springboot集成dubbo,不过demo的学习始终不及实战过程复杂,真正开始去学、去用,才会学到真正有用的东西,当然踩坑过程可想而知。笔者在这里就记录一下自己完全从零开始搭建分布式环境,以及用springboot集成dubbo+zookeeper(配置中心、注册中心、元数据中心)的详细过程。

技术栈

  • 开发工具:IntelliJ IDEA
  • springboot
  • zookeeper
  • dubbo-admin
  • maven私服搭建

学习过程

了解分布式应用架构

参考:http://dubbo.apache.org/zh-cn/docs/user/preface/background.html

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

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

流动计算架构

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

dubbo入门



节点角色说明

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

调用关系说明

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

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

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

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

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

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

了解更多,详见:Apache Dubbo官网

开始搭建

准备

两台内网服务器(一台也可以,虚拟机也行,我反正是用学校的):

host 1:172.16.250.42(centos7,以下简称42服务器)

host 2:172.16.250.46(centos7,以下简称46服务器)

安装Java环境

系统自带openJDK,但是和JDK还是有区别,有很多包缺失,还是卸载,安装专业JDK,过程自行Baidu。

安装zookeeper

1、官网下载安装包:http://zookeeper.apache.org/releases.html

2、使用xftp将压缩包上传到42服务器的自定义路径下(我的是/www/server/download),解压zookeeper到/www/server/目录下:

  1. tar -xzvf zookeeper-3.4.14.tar.gz -C /www/server

3、配置zoo.cfg,进入conf目录下,将zoo_sample.cfg复制一份,命名为zoo.cfg:

  1. cd /www/server/zookeeper-3.4.14/conf
  2. cp zoo_sample.cf zoo.cfg

4、编辑zoo.cfg,自定义以下配置(不用专门创建data目录,zookeeper启动会自动创建):

客户端默认访问端口是2181,记得开启2181端口,我用的宝塔,端口管理比较方便



5、启动zookeeper:

  1. cd /www/server/zookeeper-3.4.14/bin
  2. ##启动
  3. ./zkServer.sh start
  4. ##查看状态
  5. ./zkServer.sh status

最新dubbo-admin部署
前后端分离部署

界面预览







开始部署

1、dubbo-admin:dubbo-admin介绍

github地址:https://github.com/apache/dubbo-admin

在这个界面的readme文件中官方已经给出了安装步骤,一开始没看懂开发环境部署和生产部署的区别,看到项目代码结构,可以看到里面有dubbo-admin-server和dubbo-admin-ui两个,其实就是前后端,server提供服务api,ui负责展示数据,因此我们需要两个都进行编译部署:

2、后端server部署过程:

我这里部署到46服务器上,因为dubbo的前后端分别占用8081和8080端口,我42服务器应用有点多了,登录46服务器,进入/www/server目录开始操作:

  1. ## 我的工作目录
  2. cd /www/server
  3. ## 下载git代码
  4. git clone https://github.com/apache/dubbo-admin.git
  5. ## 如果下载很慢,你可以在windows上下载zip压缩包,然后使用xftp上传到服务器解压亦可
  6. ## 进入server后端,编译打包:
  7. cd dubbo-admin/dubbo-admin-server
  8. ## 1、打包编译之前,先修改dubbo-admin-server/src/main/resources/application.properties配置文件:
  9. ## 2、这里我使用zookeeper做动态配置中心,最后在配置中心配置注册中心和元数据中心的地址,所以application.properties配置如下:
  10. ----------
  11. # centers in dubbo2.7
  12. #admin.registry.address=zookeeper://172.16.250.42:2181
  13. ## zookeeper安装在42服务器上,因此地址填172.16.250.42:2181
  14. admin.config-center=zookeeper://172.16.250.42:2181
  15. #admin.metadata-report.address=zookeeper://172.16.250.42:2181
  16. ## dubbo-admin-ui登录的账号密码
  17. admin.root.user.name=root
  18. admin.root.user.password=root
  19. #group
  20. admin.registry.group=dubbo
  21. admin.config-center.group=dubbo
  22. admin.metadata-report.group=dubbo
  23. admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
  24. admin.apollo.appId=test
  25. admin.apollo.env=dev
  26. admin.apollo.cluster=default
  27. admin.apollo.namespace=dubbo
  28. ----------
  29. ## 保存配置文件,在dubbo-admin-server目录下(pom.xml所在目录)编译打包:
  30. ## 说明:这里需要在服务器安装maven,具体可百度怎么安装,建议将maven中央仓库地址改为阿里云的,速度快一点,可参考我的博客:
  31. ## [Maven配置阿里云仓库](https://gongsir.blog.csdn.net/article/details/103910642)
  32. ## 执行编译打包命令,跳过测试:
  33. mvn clean package -Dmaven.test.skip=true
  34. ## build success之后,就可以运行了:
  35. cd target/
  36. ## 后台运行:
  37. nohup java -jar dubbo-admin-server-0.1.jar &
  38. ## 查看日志:
  39. tail -f nohup.out

检查后端运行状态,浏览器输入172.16.250.46:8080/swagger-ui.html,看到swagger文档即可(记得开放8080端口):

3、前端UI部署过程:

部署之前先安装node.js环境,我用的宝塔,一键部署nodejs环境,很方便,环境部署之后,npm -v能看到版本就开始部署dubbo-ui吧:

  1. ## 进入ui目录
  2. cd dubbo-admin-ui/
  3. ## 安装npm依赖
  4. ## 在这之前,改一下npm的配置,配置淘宝镜像
  5. npm set registry "https://registry.npm.taobao.org"
  6. ## 开始
  7. npm install
  8. ## 接下来运行
  9. npm run dev
  10. ## 看到localhost:8081就运行成功了
  11. ## 踩坑:这里只能localhost访问,远程无法访问,只需修改config/index.js文件,将host从localhost改成0.0.0.0即可
  12. ## 这样:Your application is running here: http://0.0.0.0:8081

打开浏览器,输入172.16.250.46:8081:



还没有结束,我们还需要配置zookeeper的注册中心和元数据中心,否则会有以下提示:



点击那个提示链接之后,我们会看到官方给出的推荐配置说明:



但似乎不知道说的啥,不知道那个path: /dubbo/config/dubbo/dubbo.properties在哪,其实很简单,我们在dubbo-admin界面点击左侧菜单的——配置管理,在里面创建配置:

应用名:global

配置内容:

  1. ## 注册中心地址
  2. dubbo.registry.address=zookeeper://172.16.250.42:2181
  3. ## 元数据中心地址
  4. dubbo.metadata-report.address=zookeeper://172.16.250.42:2181



最后点击保存,我们打开控制台,就可以看到官方所说的path路径:



最后,我们在开发服务端的时候,只需在配置文件中写上配置中心的地址就可以使用配置中心的注册中心和元数据中心:

项目yml配置部分如下:

  1. dubbo:
  2. application:
  3. id: dubbo-user
  4. name: user-service-provider
  5. ## 这里配置配置中心的地址
  6. config-center:
  7. protocol: zookeeper
  8. address: zookeeper://172.16.250.42:2181
  9. scan:
  10. base-packages: cn.edu.swpu.wlzx.service.impl
  11. protocol:
  12. name: dubbo
  13. port: 20881

接下来我们就可以在dubbo-admin界面看到我们的服务了,还可以进行方法测试:

一体式部署

dubbo-admin仍然支持一体式部署(即前后端一起打包),步骤:

  1. ## 我的工作目录
  2. cd /www/server
  3. ## 下载git代码
  4. git clone https://github.com/apache/dubbo-admin.git
  5. ## 进入项目
  6. cd dubbo-admin/
  7. ## 就在这里执行编译打包命令
  8. mvn clean package ——Dmaven.test.skip=true
  9. ## 等待执行完成
  10. ## 运行项目,此时去dubbo-admin-distribution/target目录下
  11. cd dubbo-admin-distribution/target/
  12. ## 后台运行项目
  13. nohup java -jar dubbo-admin-0.1.jar > nohup.out 2&1 &

在浏览器输入:172.16.250.46:8080:



其他元数据配置同上。

springboot开发服务和注册zookeeper

我的服务代码demo:https://github.com/gongsir0630/dubbo-user

使用nexus搭建maven私服

为什么搭建私服呢?

我和团队小伙伴是线上协作开发,项目中需要用到对方封装的实体,需要引入jar,但是只能在本地仓库引入,互传jar太麻烦,索性用nexus搭建了maven私服,这样就可以把我们的jar打包发布到私服,对方就能从私服中下载依赖了。

搭建过程

这个网上比较多,按照流程基本都没问题!

踩坑

启动的时候,建议专门创建一个nexus用户来管理nexus,否则会有提示,rootxxx什么的,虽然也不影响运行,但还是按照提示建议来,还需要在nexus脚本中修改`run_as_user='nexus'.

完结

以上是自己这几天摸索的结果,还是学到了很多东西,记录下来,也希望对正在学习dubbo的小伙伴们有所帮助,以上过程如有问题,欢迎评论区交流!!!

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

springboot整合dubbo+zookeeper最新详细的更多相关文章

  1. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...

  2. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  3. SpringBoot整合dubbo(yml格式配置)

    yml文件 如果只作为服务的消费者不用暴露端口号,扫描的包名根据自己service改 dubbo: application: name: springboot-dubbo-demo #应用名 regi ...

  4. Springboot整合Dubbo和Zookeeper

    Dubbo是一款由阿里巴巴开发的远程服务调用框架(RPC),其可以透明化的调用远程服务,就像调用本地服务一样简单.截至目前,Dubbo发布了基于Spring Boot构建的版本,版本号为0.2.0,这 ...

  5. 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)

    http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...

  6. dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级

    1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...

  7. 😊SpringBoot 整合 Elasticsearch (超详细).md

    SpringBoot 整合 Elasticsearch (超详细) 注意: 1.环境搭建 安装es Elasticsearch 6.4.3 下载链接 为了方便,环境使用Windows 配置 解压后配置 ...

  8. springboot多模块开发以及整合dubbo\zookeeper进行服务管理

    之前研究了springboot单工程的使用,参考git地址:https://github.com/qiao-zhi/springboot-ssm 下面研究springboot多模块开发的过程. 1.模 ...

  9. SpringBoot整合dubbo

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 以上介绍来源于百度百科,具体dubbo相关可以自行查 ...

随机推荐

  1. http 详解

    HTTP协议中GET.POST和HEAD的介绍 GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体 ...

  2. 关于Newtonsoft.Json引用报错

    自己运行的vs版本是2012,然后同事用了2017的,我把代码发给他后运行发现报以下错误: {未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0, Cul ...

  3. 上周 GitHub 热点速览 vol.09:手撕 LeetCode 一日 star 破两千

    作者:HelloGitHub-小鱼干 摘要(用于 公众号/博客园等地方):上周 GitHub 趋势榜相较上上周就如同前故事一般,跌到不行,无论是新晋开源小项,还是坚挺老项目,Star 增长量都不如之前 ...

  4. Mongodb 对于Sort排序能够支持的最大内存限制查看和修改

    MongoDB Server对于Sort排序能够支持的最大内存限制查看: > use admin switched to db admin >db.runCommand({ getPara ...

  5. Spring事务Transactional和动态代理(二)-cglib动态代理

    系列文章索引: Spring事务Transactional和动态代理(一)-JDK代理实现 Spring事务Transactional和动态代理(二)-cglib动态代理 Spring事务Transa ...

  6. mac中如何复制拷贝文件或文件夹的路径

    copy path in Mac 首先打开 automator(自动操作) 然后 最后command+s保存,命名为copy path. 然后随便找个文件右击,选择服务,再选择 copy path , ...

  7. d3学习day3 --y轴添加文本标签

    y轴添加文本标签 g.append("g") .call(y_axis) .append("text") .text("price($)") ...

  8. 2020年,如何成为一名 iOS 开发高手!

    2020年对应程序员来说,是一个多灾的年份,很多公司都进行了不同比例的优化和裁员.等疫情得到控制后,将会是找工作的高峰期,从去年的面试经历来看,现在只会单纯写业务代码的人找工作特别难,很多大厂的面试官 ...

  9. 《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用:流量控制和熔断机制

    IM 系统的不可用主要有以下两个原因: 一是无法预测突发流量,即使进行了服务拆分.自动扩容,但流量增长过快时,服务已经不可用了: 二是业务中依赖的这些接口.资源不可用或变慢时,比如发消息可能需要依赖& ...

  10. 一份简明的 Base64 原理解析

    书接上回,在 记一个 Base64 有关的 Bug 一文里,我们说到了 Base64 的编解码器有不同实现,交叉使用它们可能引发的问题等等. 这一回,我们来对 Base64 这一常用编解码技术的原理一 ...