SpringCloud天机学堂环境搭建(二)
1、企业开发模式
在企业开发中,微服务项目非常庞大,往往有十几个,甚至数十个,数百个微服务。而这些微服务也会交给不同的开发组去完成开发。你可能只参与其中的某几个微服务开发,那么问题来了:
如果我的微服务需要访问其它微服务怎么办?
难道说我需要把所有的微服务都部署到自己的电脑吗?
很明显,这样做是不现实的。第一,不是所有的代码你都有访问的权限;第二,你的电脑可能无法运行这数十、数百的微服务。
因此,企业往往会提供一个通用的公共开发、测试环境,在其中部署很多公共服务,以及其它团队开发好的、开发中的微服务。
而我们大多数情况下只在本地运行正在开发的微服务,此时我们就需要一些其它的测试手段:
- 单元测试:测试最小的可测试单元
- 集成测试:验证某些功能接口,是否能与其它微服务正确交互
- 组件测试:验证微服务组件
- 端对端联调:验证整个系统
单元测试
单元测试一般是在项目的test目录下自己编写的测试,可以针对具体到每一个方法的测试。
集成测试
接口开发完成后,可能需要调用其它微服务接口,此时可以调用开发环境中的其它微服务,测试接口功能是否正常工作。
组件测试
将自己团队开发的微服务部署到开发环境,作为一个微服务组件,与开发环境中的其它微服务联调,测试整个微服务是否正常工作。
端对端测试
在测试环境部署前端、后端微服务群,直接进行前后端的联调测试。
当然,实际中我们可以把集成测试与组件测试合并,开发完成后直接与开发环境的其它微服务联调,测试服务工作状态。
在天机学堂中,我们也给大家模拟了这样的一个开发环境,其中部署了各种公共服务,而我们只需要在本地开发未完成的几个服务即可:
2、导入虚拟机
为了模拟企业中的开发环境,我们利用虚拟机搭建了一套开发环境,其中部署了开发常用的组件:
- Git私服(gogs):代码全部提交带了自己的Git私服,模拟企业开发的代码管理,大家也需要自行到私服拉取代码
- jenkins:持续集成,目前已经添加了所有部署脚本和Git钩子,代码推送会自动编译,可以根据需求手动部署
- nacos:服务注册中心、统一配置管理,大多数共享的配置都已经交给nacos处理
- seata:分布式事务管理
- xxl-job:分布式任务系统
- elasticsearch:索引库
- redis:缓存库
- mysql:数据库
- kibana:es控制台
如图:
导入方式有两种:
- 方式一:下载完整虚拟机并导入,参考文档《虚拟机导入说明》
- 方式二:下载基础DockerCompose文件,及基础数据,利用脚本一键部署。参考文档《自定义部署》
注意:导入虚拟机后所有软件即可使用,无需重复安装,VMware一定要按照文档中设置IP,不要私自修改
。一定要关闭windows防火墙。
3、配置本机hosts
为了模拟使用域名访问,我们需要在本地配置hosts:
192.168.150.101 git.tianji.com
192.168.150.101 jenkins.tianji.com
192.168.150.101 mq.tianji.com
192.168.150.101 nacos.tianji.com
192.168.150.101 xxljob.tianji.com
192.168.150.101 es.tianji.com
192.168.150.101 api.tianji.com
192.168.150.101 www.tianji.com
192.168.150.101 manage.tianji.com
192.168.150.101 cpolar.tianji.com
当我们访问上述域名时,请求实际是发送到了虚拟机,而虚拟机中的Nginx会对这些域名做反向代理,这样我们就能请求到对应的组件了:
在浏览器中输入对应域名,即可查看到对应服务,例如Git私服地址:http://git.tianji.com
每个域名对应的服务列表如下:
名称 | 域名 | 账号 | 端口 |
---|---|---|---|
Jenkins持续集成 | jenkins.tianji.com | root/123 | 18080 |
RabbitMQ | mq.tianji.com | tjxt/123321 | 15672 |
Nacos控制台 | nacos.tianji.com | nacos/nacos | 8848 |
xxl-job控制台 | xxljob.tianji.com | admin/123456 | 8880 |
ES的Kibana控制台 | es.tianji.com | - | 5601 |
微服务网关 | api.tianji.com | - | 10010 |
用户端入口 | www.tianji.com | - | 18081 |
Git私服 | git.tianji.com | tjxt/123321 | 10880 |
管理端入口 | manage.tianji.com | - | 18082 |
redis | 123321 | ||
mysql | root/123 |
同样,我们访问用户端或者管理端页面时,也会被Nginx反向代理:
当我们访问www.tianji.com时,请求会被代理到虚拟机中的 /usr/local/src/tj-portal
目录中的静态资源
当页面访问api.tianji.com时,请求会被代理到虚拟机中的网关服务。
4、虚拟机部署
项目已经基于Jenkins实现了持续集成,每当我们push代码时,就会触发项目完成自动编译和打包。
我们可以在Git仓库模拟代码push操作:
- 首先,访问http://git.tianji.com(tjxt/123321),找到tianji这个仓库,点击仓库设置按钮:
- 然后,点击《管理Web钩子》菜单,进入页面后点击钩子后面的修改按钮:
进入页面后,向下滚动,点击测试推送按钮:
然后回到jenkins页面,会发现已经触发了tjxt-dev-build
的自动编译。如果没有的嘛,手动点击tjxt-dev-build
进行编译。
需要运行某个微服务时,我们只需要经过两步:
- 第一步,访问jenkins控制台:http://jenkins.tianji.com (账号:root/123)
- 第二步,选一个尚未构建的微服务,点击对应微服务后面的运行按钮
构建过程中,可以在页面左侧看到构建进度,如果没有说明构建已经结束了(你的机器速度太快了!):
完成后,点击对应的微服务名称【例如tj-gateway】,即可进入构建任务的详情页面,在页面左侧可以看到构建历史:
其中#1代表第一次构建,点击前面的√即可查看构建日志:
看到上面的日志,说明构建已经成功,容器也成功运行了。
我们需要分别启动几个开发完成的微服务:
- tj-user
- tj-auth
- tj-gateway
- tj-course
- tj-media
- tj-search
- tj-exam
- tj-data
此时访问Nacos控制台,可以看到微服务都成功注册了:
此时访问 http://www.tianji.com (jack/123 rose/123456)即可看到用户端页面:
此时访问 http://manage.tianji.com 即可看到管理端页面:
如果想要知道微服务具备哪些API接口,可以访问网关中的swagger页面,路径如下:
http://api.tianji.com/doc.html
其中可以查看所有微服务的接口信息
5、本地部署
对于需要开发功能的微服务,则需要在本地部署,不过首先我们要把代码拉取下来。
查看Git私服的代码:http://git.tianji.com/tjxt/tianji :
利用命令将代码克隆到你的IDEA工作空间中:
git clone http://192.168.150.101:10880/tjxt/tianji.git -b lesson-init
注意,开发时需要使用dev分支,因此我们需要创建新的分支:
# 进入项目目录
cd tianji
# 创建新的分支
git checkout -b dev
为了方便我们教学,目前所有微服务代码都聚合在了一个Project中,如图:
在默认情况下,微服务启用的是dev配置,如果要在本地运行,需要设置profile为local:
可以在本地启动ExamApplication
,然后我们去Nacos控制台查看exam-service,可以看到有两个实例,分别是虚拟机IP和宿主机IP: