T31实战工程搭建
一、工程搭建思路
考虑到既要兼顾学习过程,能够体会到微服务搭建的整个过程,又要考虑到作业交付的压力。不能在无谓的用户角色菜单功能上浪费太多精力,就计划选择一个开源的低代码开发平台,包括基本的管理员功能。
1.1 基础架构选型
一开始考虑从jeecg和renren-fast中选择;
jeecg基本是一个完备的框架,微服务架构都已经完整,选择jeecg就意味着,我只需要熟悉这个框架,直接做业务开发就可以了,无法体验微服务的整个搭建过程。
renren-fast是一个单体框架,对springboot开发有一个基本的封装,而且具备用户、角色、菜单上基本功能。适合作为T31学习的基本框架。
1.2 微服务选型
技术栈和课程保持同步:
Spring Boot 2.3.2.RELEASE
Spring Cloud Hoxton.SR8
Spring Cloud Alibaba 2.2.5.RELEASE
Mybatis 3.5.4
Mybatis Plus 3.3.2
Spring Security OAuth2 2.2.4.RELEASE
二、 服务搭建过程
2.1 建立父工程t31-wuhe
五合是我们小组的名称,我们小组全程是五合1组,所以我们组的工程名字就是t31-wuhe。
父工程主要两个职责
1. 模块管理。
2. 依赖管理
依赖spring-boot-starter-parent;maven不会自动从maven远程仓库去拉取,所以会报错。可以先把这个写到依赖中,完成下载后,再这样声明。
项目中公共依赖做声明:
2.2 启动nacos
下载nacos,修改启动脚本,改成standalone模式启动:
set MODE="standalone"
直接运行启动脚本即可,启动后访问localhost:8848, 默认用户名和密码都是nacos。
2.3 构建第一个模块t31-admin
下载renren-fast,删掉.git目录,修改目录名为t31-admin:
git clone gitee.com/renrenio/re…
复制到t31-wuhe下,修改pom,
- 依赖于父工程
- 去掉父类中已经设置好依赖管理类的version。
如图,不需要再声明version:
-
数据初始化 将db目录中的sql导入数据,配置application.yml中的文件,连接配置好的数据库。
-
修改启动类注解,配置nacos服务注册中心
在启动类中添加注解:
@EnableDiscoveryClient
在配置文件中,配置nacos:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- 启动服务,在nacos控制台可以看到对应的服务。
2.4 启动前端工程
首先安装node 10+, 配置npm源为taobao:
npm config set registry registry.npm.taobao.org
然后在前端工程目录下运行:
npm install npm run dev
即可看到前端页面,默认用户名密码都是admin。
2.5 api gateway
新建子模块t31-gateway
- pom中添加spring cloud gateway依赖
由于spring cloud gateway保持默认依赖于webflux,所以排除掉spring web
-
同2.3中描述,注册到nacos
-
添加转发规则
spring:
cloud:
gateway:
routes:
- id: admin_route
uri: lb://t31-admin
predicates:
- Path=/t31-admin/**
- 启动gateway
启动后,在nacos下可以看到两个系统注册到nacos上。
2.6 整合
前端工程通过apigateway调用
t31-ui工程的url前缀调整为apigateway的地址;
跨域问题解决
在apigateway中统一添加跨域的响应头。
@Configuration
public class T31CorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); //可以携带cookie信息
config.addAllowedOrigin("*"); //允许所有的请求地址 访问
config.addAllowedHeader("*"); //允许携带所有的请求头信息
config.addAllowedMethod("*"); //允许所有的请求方式 get post put delete option
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
去掉admin服务中的跨域拦截器。
服务搭建总结
服务搭建过程中,总会遇到各种各样的坑,仔细看异常,找到问题根源去解决,不要瞎猜,会很打击信息。