快速搭建 SpringCloud 微服务开发环境的脚手架
本文适合有 SpringBoot 和 SpringCloud 基础知识的人群,跟着本文可使用和快速搭建 SpringCloud 项目。
本文作者:HelloGitHub-秦人
HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款基于 SpringCloud2.1 的微服务开发脚手开源项目——SpringCloud
一、微服务的简介
微服务是可以独立部署、水平扩展、独立访问的服务单元。Java 中常见最小的微服务单元就是基于 SpringBoot 框架的一个独立项目。一个微服务只做一件事(单一职责),多个微服务组合才能称之为一个完整的项目或产品。那么多个微服务的就需要来管理,而 SpringCloud 就是统筹这些微服务的大管家。它是一系列有序框架的集合,简单易懂、易部署易维护的分布式系统开发工具包。
今天介绍的开源项目就是基于 SpringCloud2.1 的脚手架,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上,下面就让我们一起来看看这个项目的使用吧。
二、项目结构
这里以一个网关(gateway-admin)微服务来说明。
项目目录结构如下图:
目录说明:
- db:项目初始化数据库脚本。
- docker:Docker 配置文件目录,将微服务打包为 docker 镜像(image)。
- config:项目配置信息目录,包括数据库配置,消息转化配置等。
- dao:数据库操作目录,主要对底层数据进行增删查改。
- entity:项目实体类目录。
- events:事件处理目录。
- exception:异常处理目录,通过面向切面处理全局异常。
- rest:微服务控制器目录,也就是对外提供的接口。
- service:微服务业务层目录。
- GatewayAdminApplication:微服务 SpringBoot 入口类。
- resources:项目配置文件目录。
- test:项目单元测试目录。
- pom.xml:maven 项目对象模型文件。
三、实战操作
3.1 前提
- 确保本地安装 Git、Java8、Maven。
- 懂一些 SpringMVC 的知识,因为 SpringBoot 是基于 SpringMVC 演化而来的。
- 懂一些应用容器引擎 Docker、Docker-compose 的知识。
3.2 微服务架构说明
一个完整的项目,微服务架构一般包括下面这些服务:
- 注册中心(常用的框架 Nacos、Eureka)
- 统一网关(常用的框架 Gateway、Zuul)
- 认证中心(常用技术实现方案 Jwt、OAuth)
- 分布式事务(常用的框架 Txlcn、Seata)
- 文件服务
- 业务服务
3.3 运行项目
下面介绍了三种运行的方式:
第一种:一键运行
Linux 和 Mac 系统下可在项目根目录下执行 ./install.sh
快速搭建开发环境。
第二种:本地环境运行
不推荐此方法,但还是简单介绍下。
基础环境安装:mysql、redis,rabbitmq
环境运行:
git clone https://github.com/zhoutaoo/SpringCloud.git #克隆项目
安装认证公共包到本地 maven 仓库,执行如下命令:
cd common
mvn clean install #安装认证公共包到本地 maven 仓库
安装注册中心 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 启动命令
运行网关服务、认证服务、业务服务等
这里以网关服务为例:执行 GatewayAdminApplication.java
注意:认证服务(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: 300 datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:localhost}:${DATASOURCE_PORT:3306}/sc_gateway?characterEncoding=UTF-8&useUnicode=true&useSSL=false
username: ${DATASOURCE_USERNAME:root}
password: ${DATASOURCE_PASSWORD:root123}
bootstrap.yml 文件主要配置服务基本信息(端口,服务名称),注册中心地址等。
server:
port: ${SERVER_PORT:8445}
spring:
application:
name: gateway-admin
cloud:
nacos:
discovery:
server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
config:
server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
file-extension: yml
sentinel:
transport:
dashboard: ${SENTINEL_DASHBOARD_HOST:localhost}:${SENTINEL_DASHBOARD_PORT:8021}
第三种:Docker 环境运行
基础环境安装
通过 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 服务
下载项目到本地
git clone https://github.com/zhoutaoo/SpringCloud.git #克隆项目
安装认证公共包到本地 maven 仓库执行如下命令:
cd common && mvn install #安装认证公共包到本地maven仓库
docker-compose 运行 Nacos
cd docker-compose
docker-compose -f docker-compose.yml -f docker-compose.nacos.yml up -d nacos #启动注册中心
构建消息中心镜像
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 可以理解为服务正常启动。
查看后台服务
命令行执行:docker ps -a
查看 docker 所有进程信息
通过访问微服务对外暴露的接口(swagger)检测服务是否可用。
swager 接口地址:http://IP:port/swagger-ui.html
测试如下图:
四、最后
微服务(SpringBoot、SpringCloud、Docker)现在吵得特别火,它并不是一门新的技术,而是在老技术的基础上衍生出来的,增加了一些新的特性。
教程至此,你应该能够通过 SpringCloud 这项目快速搭建微服务了。那么就可以开始你的微服务学习之旅了,是时候更新一下自己的技能树了,让我们一起来学习微服务吧!
五、参考资料
『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~
快速搭建 SpringCloud 微服务开发环境的脚手架的更多相关文章
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- 构建微服务开发环境8————Hello 微服务
[内容指引] 1.用IDEA打开微服务项目; 2.更新Maven依赖: 3.IntelliJ IDEA JDK配置; 4.修改代码: 5.运行微服务: 6.将代码变更提交到Github. 经过前面的努 ...
- 构建微服务开发环境4————安装Docker及下载常用镜像
[内容指引] 下载Docker: Mac下安装Docker: Windows下安装Docker; 下载常用docker镜像. 一.下载Docker 1.Mac适用Docker下载地址:https:// ...
- 二、springcloud微服务测试环境搭建
版本说明: springcloud:Greenwich.SR3 springboot:2.1.8 1.构建步骤 1.1.microservicecloud整体父工程Project 新建父工程micro ...
- 搭建SpringCloud微服务框架:一、结构和各个组件
搭建微服务框架(结构和各个组件) 简介 SQuid是基于Spring,SpringBoot,使用了SpringCloud下的组件进行构建,目的是想搭建一套可以快速开发部署,并且很好上手的一套微服务框架 ...
- 构建微服务开发环境1————如何安装JDK
[内容指引] 下载JDK: Mac系统安装JDK: Mac系统配置环境变量: Windows系统安装JDK: Windows系统配置环境变量. 一.下载JDK 1.访问Oracle官网 http:// ...
- 快速认识springcloud微服务
这周浅显的学习了springcloud.简单聊一下微服务.所谓的微服务远远没有我想想的那么高端难以理解,简单说,就是多个服务分布在不同的服务器上,由这些服务互相配合完成某一项任务.那服务和服务之间调用 ...
- 搭建SpringCloud微服务
建立spring父模块 删除不必要的src目录 父模块中的pom.xml中添加相应的依赖以及插件.远程仓库地址 <!-- 项目的打包类型, 即项目的发布形式, 默认为 jar. 对于聚合项目的父 ...
- Docker 快速搭建 MySQL 5.6 开发环境
使用 Docker 快速搭建一个 MySQL 5.6 开发环境 步骤 获取镜像 docker pull mysql:5.6 启动容器,密码 123456,映射 3306 端口 docker run - ...
随机推荐
- Exception evaluating SpringEL expression:
Exception evaluating SpringEL expression:错误 说明: 在帮助同事看BUG的时候遇上了这个问题,不知道是前端还是后端的错误 在网上找了很多文章解决的方法,很多都 ...
- 百万年薪python之路 -- 小数据池和代码块
1.小数据池和代码块 # 小数据池 -- 缓存机制(驻留机制) # == 判断两边内容是否相等 # a = 10 # b = 10 # print(a == b) # is 是 # a = 10 # ...
- Mybaits 源码解析 (四)----- SqlSession的创建过程(看懂框架源码再也不用死记硬背面试题)
SqlSession是mybatis的核心接口之一,是myabtis接口层的主要组成部分,对外提供了mybatis常用的api.myabtis提供了两个SqlSesion接口的实现,常用的实现类是De ...
- 设计模式(二十二)Command模式
一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...
- Golang的安装和编译
一.下载安装(Ubuntu16.04) 1.下载地址:https://golang.google.cn/dl/ 2.下载Linux版本的安装包go1.10.3.linux-amd64.tar.gz并复 ...
- C#关于private protected sealed Virtual/Override
Public:公开权限 Private:修饰类时类为程序集或者包含此类的类内部权限:修饰变量时只能类内部使用: Protected:修饰变量,只能继承类可以使用,对外(包括继承类的实例)无权限: Ab ...
- .NET Core 3.0 中间件 Middleware
中间件官网文档解释:中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件: 选择是否将请求传递到管道中的下一个组件. 可在管道中的下一个组件前后执行工作. 使用 IApplicationBui ...
- 在虚拟机上的关于FTP FTP访问模式(本地用户模式)
首先你要有vsftpd服务 可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum install vsftpd 下载完成之后打开vsftpd服务 输入命令:systemctl ...
- 转:PHP删除目录及目录下所有文件
PHP删除目录及目录下所有文件 <?php //循环删除目录和文件函数 function delDirAndFile( $dirName ) { if ( $handle = opendir( ...
- group 状压dp
应某些人要求,我把标签删掉了 这是一道好题. 一看$c<=16$果断状压,但是怎么压? 一个很显然的思路是,枚举上下两层的状态,每一层的状态极限有$C(c,c/2)$,c=16的时候有13000 ...