引入

最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习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/目录下:

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

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

cd /www/server/zookeeper-3.4.14/conf

cp zoo_sample.cf zoo.cfg

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

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



5、启动zookeeper:

cd /www/server/zookeeper-3.4.14/bin
##启动
./zkServer.sh start
##查看状态
./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目录开始操作:

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

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

3、前端UI部署过程:

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

## 进入ui目录
cd dubbo-admin-ui/
## 安装npm依赖
## 在这之前,改一下npm的配置,配置淘宝镜像
npm set registry "https://registry.npm.taobao.org"
## 开始
npm install
## 接下来运行
npm run dev
## 看到localhost:8081就运行成功了
## 踩坑:这里只能localhost访问,远程无法访问,只需修改config/index.js文件,将host从localhost改成0.0.0.0即可
## 这样: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

配置内容:

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



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



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

项目yml配置部分如下:

dubbo:
application:
id: dubbo-user
name: user-service-provider
## 这里配置配置中心的地址
config-center:
protocol: zookeeper
address: zookeeper://172.16.250.42:2181
scan:
base-packages: cn.edu.swpu.wlzx.service.impl
protocol:
name: dubbo
port: 20881

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

一体式部署

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

## 我的工作目录
cd /www/server
## 下载git代码
git clone https://github.com/apache/dubbo-admin.git
## 进入项目
cd dubbo-admin/
## 就在这里执行编译打包命令
mvn clean package ——Dmaven.test.skip=true
## 等待执行完成
## 运行项目,此时去dubbo-admin-distribution/target目录下
cd dubbo-admin-distribution/target/
## 后台运行项目
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. 网络编程01 · 艺

    Web Socket和Socket 套接字,实际就是传输层的接口.用于抽象传输层,隐藏细节.一对套接字可以进行通信. Web Socket,是基于TCP协议的.类似于,http. 为什么需要Web S ...

  2. PHP数组知识点整理

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. 热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创)

    热更新,App双开,App隐藏,App试用 -- Replugin的实际应用(原创) RePlugin是Qihoo 360公司的开源框架,原本目的是用于热更新.但是,这个框架提供的功能远远超出了热更新 ...

  4. 【Java】Map总结和源码注释

    前言 Map为一个Java中一个重要的数据结构,主要表示<key, value>的映射关系对.本文包括了相关Map数据结构的总结和源码的阅读注释. HashMap 初始化,可以选择第二个初 ...

  5. VMware安装CentOS6.X 系统

    1.虚拟机中的"CD/DVD(IDE)"配置好Linux映像文件后,打开虚拟机,点击"开启此虚拟机" 2.进入光盘启动界面,选择第一项,表示安装升级Linux系 ...

  6. Docker深入浅出系列 | Docker Compose多容器实战

    目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...

  7. 原生js实现replace方法

    今天看到有人提问js的replace方法怎么实现的,自己就试了试js手册里的String对象的介绍replace大概是这样: string.replace(regexp, replacement) 第 ...

  8. JZOJ 3453.【NOIP2013中秋节模拟】连通块(connect)

    3453.[NOIP2013中秋节模拟]连通块(connect) Time Limits: 1000 ms Memory Limits: 262144 KB (File IO): input:conn ...

  9. 数据结构 4 时间复杂度、B-树 B+树 具体应用与理解

    前言 面试中,经常会问到有关于MYSQL 索引的相关概念,我们之前也都学过有关树的概念.以及二叉树.二叉查找树.红黑树等.这一节,来关注经常是数据库索引中使用的B-树 在说这些之前,我们需要了解时间复 ...

  10. NLP(二十五)实现ALBERT+Bi-LSTM+CRF模型

      在文章NLP(二十四)利用ALBERT实现命名实体识别中,笔者介绍了ALBERT+Bi-LSTM模型在命名实体识别方面的应用.   在本文中,笔者将介绍如何实现ALBERT+Bi-LSTM+CRF ...