搭建微服务_快速搭建 SpringCloud 微服务开发环境的脚手架

4472dc382b42dd6250ddd1a2cc4430d7.png

本文作者:HelloGitHub-秦人

本文适合有 SpringBoot 和 SpringCloud 基础知识的人群,跟着本文可使用和快速搭建 SpringCloud 项目。

HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款基于 SpringCloud2.1 的微服务开发脚手开源项目——SpringCloud

项目源码地址:https://github.com/zhoutaoo/SpringCloud

一、微服务的简介

微服务是可以独立部署、水平扩展、独立访问的服务单元。Java 中常见最小的微服务单元就是基于 SpringBoot 框架的一个独立项目。一个微服务只做一件事(单一职责),多个微服务组合才能称之为一个完整的项目或产品。那么多个微服务的就需要来管理,而 SpringCloud 就是统筹这些微服务的大管家。它是一系列有序框架的集合,简单易懂、易部署易维护的分布式系统开发工具包。

今天介绍的开源项目就是基于 SpringCloud2.1 的脚手架,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上,下面就让我们一起来看看这个项目的使用吧。

二、项目结构

这里以一个网关(gateway-admin)微服务来说明。

项目目录结构如下图:

80dbd01e240d6e7554f460c453d531bb.png

目录说明:

  1. db:项目初始化数据库脚本。
  2. docker:Docker 配置文件目录,将微服务打包为 docker 镜像(image)。
  3. config:项目配置信息目录,包括数据库配置,消息转化配置等。
  4. dao:数据库操作目录,主要对底层数据进行增删查改。
  5. entity:项目实体类目录。
  6. events:事件处理目录。
  7. exception:异常处理目录,通过面向切面处理全局异常。
  8. rest:微服务控制器目录,也就是对外提供的接口。
  9. service:微服务业务层目录。
  10. GatewayAdminApplication:微服务 SpringBoot 入口类。
  11. resources:项目配置文件目录。
  12. test:项目单元测试目录。
  13. pom.xml:maven 项目对象模型文件。

三、实战操作

3.1 前提

  • 确保本地安装 Git、Java8、Maven。
  • 懂一些 SpringMVC 的知识,因为 SpringBoot 是基于 SpringMVC 演化而来的。
  • 懂一些应用容器引擎 Docker、Docker-compose 的知识。

3.2 微服务架构说明

一个完整的项目,微服务架构一般包括下面这些服务:

  • 注册中心(常用的框架 Nacos、Eureka)
  • 统一网关(常用的框架 Gateway、Zuul)
  • 认证中心(常用技术实现方案 Jwt、OAuth)
  • 分布式事务(常用的框架 Txlcn、Seata)
  • 文件服务
  • 业务服务

6d94d4f2647e299f99e9e2e7f280100a.png

3.3 运行项目

下面介绍了三种运行的方式:

第一种:一键运行

Linux 和 Mac 系统下可在项目根目录下执行 ./install.sh 快速搭建开发环境。

第二种:本地环境运行

不推荐此方法,但还是简单介绍下。
  1. 基础环境安装:mysql、redis,rabbitmq

2. 环境运行:

git clone https://github.com/zhoutaoo/SpringCloud.git #克隆项目

3. 安装认证公共包到本地 maven 仓库,执行如下命令:

cd common     
mvn clean install #安装认证公共包到本地 maven 仓库 

4. 安装注册中心 Nacos

    • 下载 Nacos
    • 执行如下命令:
unzip nacos-server-0.9.0.zip OR tar -xvf nacos-server-0.9.0.tar.gz
cd nacos/bin
bash startup.sh -m standalone # Linux 启动命令
cmd startup.cmd # Windows 启动命令 

5. 运行网关服务、认证服务、业务服务等

这里以网关服务为例:执行 GatewayAdminApplication.java

8caf243749dcce56ad26944a129542ff.png

注意:认证服务(auth)、网关服务(gateway)、组织管理服务(sysadmin)需要执行数据库初始化脚本。

可通过 swager 接口:http://localhost:8445/swagger-ui.html 测试是否搭建成功,如果能正常访问表示服务启动成功。

说明:

  • application.yml 文件主要配置 rabbitmq,redis, mysql 的连接信息。
spring:rabbitmq:host: ${RABBIT_MQ_HOST:localhost}port: ${RABBIT_MQ_PORT:5672}username: ${RABBIT_MQ_USERNAME:guest}password: ${RABBIT_MQ_PASSWORD:guest}redis:host: ${REDIS_HOST:localhost}port: ${REDIS_PORT:6379}#password: ${REDIS_PASSWORD:}lettuce:pool:max-active: 300datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:localhost}:${DATASOURCE_PORT:3306}/sc_gateway?characterEncoding=UTF-8&useUnicode=true&useSSL=falseusername: ${DATASOURCE_USERNAME:root}password: ${DATASOURCE_PASSWORD:root123}
  • bootstrap.yml 文件主要配置服务基本信息(端口,服务名称),注册中心地址等。
server:port: ${SERVER_PORT:8445}
spring:application:name: gateway-admincloud:nacos:discovery:server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}config:server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}file-extension: ymlsentinel:transport:dashboard: ${SENTINEL_DASHBOARD_HOST:localhost}:${SENTINEL_DASHBOARD_PORT:8021}

第三种:Docker 环境运行

  1. 基础环境安装
  • 通过 docker 命令安装
# 安装redis
docker run -p 6379:6379 --name redis -d docker.io/redis:latest --requirepass "123456" 
# 安装mysql
docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 -d docker.io/mysql:5.7
# 安装rabbitmq
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq docker.io/rabbitmq:latest
    • 也可以通过 docker-compose 命令安装
cd docker-compose
docker-compose up -d #docker-compose 安装mysql,redis,rabbitmq 服务

2. 下载项目到本地

git clone https://github.com/zhoutaoo/SpringCloud.git #克隆项目

3. 安装认证公共包到本地 maven 仓库执行如下命令:

cd common && mvn install #安装认证公共包到本地maven仓库

4. docker-compose 运行 Nacos

cd docker-compose
docker-compose -f docker-compose.yml -f docker-compose.nacos.yml up -d nacos #启动注册中心

5. 构建消息中心镜像

cd ./center/bus
mvn package && mvn docker:build
cd docker-compose
#启动消息中心
docker-compose -f docker-compose.yml -f docker-compose.center.yml up -d bus-server

需要构建镜像的其他服务有:(注:操作和消息中心镜像构建方式类似)

  • 网关管理服务 (gateway-admin、gateway-web)
  • 组织服务(sysadmin/organization)
  • 认证服务 (auth/authentication-server)
  • 授权服务(auth authorization-server)
  • 管理台服务(monitor/admin)

3.4 运行效果

Nacos 服务中心

所有服务都正常启动,在 nacos 管理中心可查看,实例数表示运行此服务的个数,值为 1 可以理解为服务正常启动。

563c5f745e42491c829deece2585afcd.png

查看后台服务

命令行执行:docker ps -a 查看 docker 所有进程信息

b290271506607aef2d9001a5bc986b9b.png

通过访问微服务对外暴露的接口(swagger)检测服务是否可用。

swager 接口地址:http://IP:port/swagger-ui.html

测试如下图:

924e4438225cc887f2e105c740b7826b.png

9a52c58dbdd3d7f97bf2e6f621f1f336.png

四、最后

微服务(SpringBoot、SpringCloud、Docker)现在吵得特别火,它并不是一门新的技术,而是在老技术的基础上衍生出来的,增加了一些新的特性。

教程至此,你应该能够通过 SpringCloud 这项目快速搭建微服务了。那么就可以开始你的微服务学习之旅了,是时候更新一下自己的技能树了,让我们一起来学习微服务吧!

五、参考资料

  • 本地安装 Nacos
  • nacos注册中心的使用
  • docker-compose教程
  • Docker技术

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

文章系列目录(持续更新中):【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)【设计模式】第二篇:单例模式的几种实现And反射对其的破坏一 为什么要用工厂模式之前讲解 Spring 的依赖注入的文章时,我们就已经…

gis根据行政区计算栅格数据计算_亚马逊fba运费根据什么计算?怎么计算?

亚马逊FBA一般有如下费用(仅做参考):1、亚马逊头程(本地发货到FBA仓库的费用)2、订单处理费(1USD / Order)3、拣货打包费(1USD / Pcs)4、重量处理费(0.46USD,这个以1磅一下的large standard size非媒介产品为例,这个是以重量等级的不同从而产…

华硕z97不识别m2固态_华硕H110T +i3 8100T 组装黑苹果Mac mini安装教程

最近组装了一台黑苹果主机,从硬件,到系统安装,驱动安装费了很大的精力,写这篇文章记录下来,希望对像我一样需求的网友有用。目前家里是网通200M的宽带,我喜欢挂pt下一些电影,怎么来播放这些电影…

vue封装websocket_有关WebSocket必须了解的知识

一、前言最近之前时间正好在学习java知识,所以自个想找个小项目练练手,由于之前的ssm系统已经跑了也有大半年了,虽然稀烂,但是功能还是勉强做到了,所以这次准备重构ssm系统,改名为postCode系统(至于为什么前…

list选取多个元素 python_【幼儿园级】0基础学python一本通(上)——AI未来系列1...

在未来面前,每个人都是学生江海升月明,天涯共此时,关注江时!引子本篇为AI未来系列第一篇。为什么要研究学习python?python是未来屠龙的屠龙宝刀,再辅助以我们的高中数学基础(足够用的屠龙术),小…

用polt3画曲面_用SolidWorks建模一个:防滑板曲面造型

防滑板曲面造型2020年4月点底部提取码:eo9z此图用SolidWorks2019版建模,用KeyShot 9.0 渲染(上面两张图) 。SW原文件在今日文件夹里。建模过程1.在上视基准面上画草图。2.曲面拉伸,反向:5 。3.新建基准面,距离上视基准…

lntellijidea怎么创建文件_DBC文件到底是个啥

本文首发自公众号“汽车技术馆”在之前的一篇文章中给大家分享了一些CAN的基本知识,比如CAN通讯是个啥,CAN通讯的机制以及CAN通讯的帧结构等等,相信读过这篇文章的朋友应该都有了一个初步的认识,如果还没有看过的朋友可以在读本文…

at moment的用法 the_值得收藏!初中英语10大词类详解+用法+考点, 这一篇全齐了!...

一、词性的分类词类又叫词性,英语单词根据其在句子中的功用,可以分成十个大类。1.名词 noun n. student 学生2.代词 pronoun pron. you 你3.形容词 adjective adj. happy 高兴的4.副词 adverb adv. quickly 迅速地5.动词 verb v. cut 砍、割6.数词 numer…

属性值动态调整_【VBA】Range对象的常用方法属性(三)

本文继续上一节的Range对象的方法和属性的讲解。上一讲讲到了End属性寻找最后一个已经使用的单元格。这一节继续讲解关于动态找单元格区域方面的属性。Offset 偏移相信学过OFFSET工作表函数的人对这个印象比较深刻,它可是函数中高手必备函数之一。在VBA中&#xff0…

mysql入门到跑路_Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26

1、 请介绍数据库管理系统的种类及代表产品RDBMS: mysql oracle mssqlNoSQL: redis mongoab memcache2、 请简述数据库管理系统的作用数据存储,管理数据,备份恢复,安全性,权限管理,3、 请简述RDBMS和NoSQL的特性对比RDBMS:强大的查询功能、强一致性、二级索引、支…

mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解

之前我们都是后缀为.msi的文件,换言之就是傻瓜式安装,但是有些版本不容易控制安装路径,或者数据库编码格式,还有些会安装很多无用的服务,但是都没有后缀为.zip文件简单直接,说是在哪里,就在哪里…

mysql count优化_MySQL count()函数及其优化

很简单,就是为了统计记录数由SELECT返回为了理解这个函数,让我们祭出 employee_tbl 表所有记录统计行的总数计算 Zara 的记录数注意:由于 SQL 查询对大小写不敏感,所以在 WHERE 条件中,无论是写成 ZARA 还是 Zara&…

dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程

dz搬家后,第一步就是上传源文件到网站根目录和导入数据库然后修改对应的数据库连接配置文件 一共有三个这样修改之后网站就可以访问啦1、config/config_global.php$_config[db][1][dbuser] 数据库用户名;$_config[db][1][dbpw] 数据库密码;$_config[db][1][dbname…

php mysql循环语句怎么写_mysql数据库循环语句该怎么写???

数据库结构num date2 2013-07-245 2013-07-258 2013-08-0310 2013-08-224 2013-09-10最后要在页面中输出为一个行行统计格式7月份 7条记录8月份 18条记录9月份 4条记录要求sql语句只有一句话,有的人会想可以select (count(条件))关键是还要换行的。。有点不会了。回…

ntext在mysql_varchar和text说不清的那些事

数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间&am…

字符串转16进制_16、atoi-整数字符串转整数-leetcode8-中等

思路:借助正则表达式。class Solution:def myAtoi(self, s: str) -> int:import repattern re.compile(r^[-]?d) # 生成patterns s.lstrip() #去除左侧空格num_str pattern.findall(s) #找到pattern,返回一个listnum int(*num_str) #用*将list解…

vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...

由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动针对这个问题,有以下几种解决方案媒体…

mysql日期为00_MySQL 8.0.13 设置日期为0000-00-00 00:00:00时出现的问题

刚开始学习 数据库 操作,今天存数据时发现,保存的时候报错 (Error 1292: Incorrect datetime value: 0000-00-00 for column deleted_at at row 1),之后就搜索了下原因,是因为 MySQL存日期时不允许出现这种格式导致的。下面记录下…

MySQL编程技巧_MySQL学习笔记---MySQL开发技巧

SQL语句分类DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATETPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTIONDCL:数据控制语言 --- GRANT、REVOKEDML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETEj…

kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇

前言上篇文章讲解了 Kafka 的基础概念和架构,了解了基本概念之后,必须得实践一波了,所谓“实践才是检验真理的唯一办法”,后续系列关于 Kafka 的文章都以 kafka_2.11-0.9.0.0 为例;另外为了让大家快速入门,…