springcloud微服务循环调用 springcloud微服务搭建
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
黑马头条一直是黑马培训班内部的项目,应该是今年推出了天机学堂的项目,所以这个头条微服务项目就被公布了,整体上看技术架构丰富,很适合微服务练手和补足。有些技术栈的版本可能是前几年的,不过这个不影响,更重要的是技术本身,今天开始自学一下,希望一个月内能搞定。差不多代码量共2万行,需要自己写的有1万多行。
- 前言
- 适合人群
- 技术架构
- 前置知识储备
- 学习重点和难点
- 环境搭建.SpringCloud微服务(注册发现、服务调用、网关)
- 1.课程对比
- 2.项目概述
- 2.1)能让你收获什么
- 2.2)项目课程大纲
- 2.3)项目概述
- 2.3.1 项目背景
- 2.4)项目术语
- 2.5)业务说明(功能架构图)
- 3.技术栈
- 3.1)环境搭建
- 4.nacos环境搭建
- 4.1)虚拟机镜像准备
- 4.2)nacos安装
- 5.初始工程搭建
- 5.1)环境准备
- 5.2)主体结构
- 5.3)全局异常
- 6.登录
- 6.1)需求分析
- 6.2)表结构分析
- 6.3)思路分析
- 6.4)**运营端微服务搭建**
- 6.4)登录功能实现
- 7.接口工具postman、swagger、knife4j
- 7.1)postman
- 7.2)Swagger
- 7.3)knife4j
- 8.网关
- 1.3 全局过滤器实现jwt校验
- 9.前端集成
- 9.1)前端项目部署思路
- 9.2)配置nginx
技术方案:
2.3.1 项目背景
随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取信息,因此,对于移动资讯客户端的需求也越来越高。黑马头条项目正是在这样背景下开发出来。黑马头条项目采用当下火热的微服务+大数据技术架构实现。本项目主要着手于获取最新最热新闻资讯,通过大数据分析用户喜好精确推送咨询新闻
项目演示地址:这些网页都打不开,暂时先留着,没准以后可以打开了
-
平台管理(官方后台管理):http://heima-admin-java.【【微信】】.itcast.cn
-
自媒体(新闻发布者):http://heime-media-java.【【微信】】.itcast.cn
-
app端(用户):http://heima-app-java.【【微信】】.itcast.cn
平台管理与自媒体为PC端,用电脑浏览器打开即可。
其中app端为移动端,打开方式有两种:
-
谷歌浏览器打开,调成移动端模式
-
手机浏览器打开或扫描右侧二维码
- Spring-Cloud-Gateway : 微服务之前架设的网关服务,实现服务注册中的API请求路由,以及控制流速控制和熔断处理都是常用的架构手段,而这些功能Gateway天然支持
- 运用Spring Boot快速开发框架,构建项目工程;并结合Spring Cloud全家桶技术,实现后端个人中心、自媒体、管理中心等微服务。
- 运用Spring Cloud Alibaba Nacos作为项目中的注册中心和配置中心
- 运用mybatis-plus作为持久层提升开发效率
- 运用Kafka完成内部系统消息通知;与客户端系统消息通知;以及实时数据计算
- 运用Redis缓存技术,实现热数据的计算,提升系统性能指标
- 使用Mysql存储用户数据,以保证上层数据查询的高性能
- 使用Mongo存储用户热数据,以保证用户热数据高扩展和高性能指标
- 使用FastDFS作为静态资源存储器,在其上实现热静态资源缓存、淘汰等功能
- 运用Hbase技术,存储系统中的冷数据,保证系统数据的可靠性
- 运用ES搜索技术,对冷数据、文章数据建立索引,以保证冷数据、文章查询性能
- 运用AI技术,来完成系统自动化功能,以提升效率及节省成本。比如实名认证自动化
- PMD&P3C : 静态代码扫描工具,在项目中扫描项目代码,检查异常点、优化点、代码规范等,为开发团队提供规范统一,提升项目代码质量
1)打开当天资料文件中的镜像,拷贝到一个地方,然后解压
2)解压后,双击ContOS7-hmtt.vmx文件,前提是电脑上已经安装了VMware
- 修改虚拟网络地址(NAT)
①,选中VMware中的编辑
?②,选择虚拟网络编辑器
③,找到NAT网卡,把网段改为200(当前挂载的虚拟机已固定ip地址)
4)修改虚拟机的网络模式为NAT
5)启动虚拟机,用户名:root 密码:itcast,当前虚拟机的ip已手动固定(静态IP), 地址为:192.168.200.130
6)使用FinalShell客户端链接
①:docker拉取镜像
②:创建容器
-
MODE=standalone 单机版
-
Crestart=always 开机启动
-
-p 8848:8848 映射端口
-
-d 创建一个守护式容器在后台运行
③:访问地址:http://192.168.200.130:8848/nacos
①:项目依赖环境(需提前安装好)
-
JDK1.8
-
Intellij Idea
-
maven-3.6.1
-
Git
②:在当天资料中解压heima-leadnews.zip文件,拷贝到一个没有中文和空格的目录,使用idea打开即可
③:IDEA开发工具配置
设置本地仓库,建议使用资料中提供好的仓库
④:设置项目编码格式
具体如下:
-
用户点击开始使用
- 登录后的用户权限较大,可以查看,也可以操作(点赞,关注,评论)
-
用户点击不登录,先看看
- 游客只有查看的权限
关于app端用户相关的内容较多,可以单独设置一个库leadnews_user
表名称 | 说明 |
---|---|
ap_user | APP用户信息表 |
ap_user_fan | APP用户粉丝信息表 |
ap_user_follow | APP用户关注信息表 |
ap_user_realname | APP实名认证信息表 |
从当前资料中找到对应数据库并导入到mysql中
登录需要用到的是ap_user表,表结构如下:
项目中的持久层使用的mybatis-plus,一般都使用mybais-plus逆向生成对应的实体类
app_user表对应的实体类如下:
手动加密(md5+随机字符串)
md5是不可逆加密,md5相同的密码每次加密都一样,不太安全。在md5的基础上手动加盐(salt)处理
注册->生成盐
登录->使用盐来配合验证
1,用户输入了用户名和密码进行登录,校验成功后返回jwt(基于当前用户的id生成)
2,用户游客登录,生成jwt返回(基于默认值0生成)‘
在heima-leadnews-service下创建工程【【微信】】
引导类
bootstrap.yml
在nacos中创建配置文件
logback.xml
具体实现课件里已经有了
①:接口定义
②:持久层mapper
③:业务层service
实现类:
④:控制层controller
全部写完之后,可以启动user子模块的启动类 这里直接启动的话会报redis的错误,因为此时还没有配置redis,我的解决方法当然是启动redis了,然后修改bootstrap.yml文件,配置redis的地址咯。 如果报这个错误
Establishing SSL connection without server’【【微信】】n is not recommended
需要关闭SSL,去Nacos中配置加上【【微信】】=false
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。postman被500万开发者和超100,000家公司用于每月访问1.3亿个API。
官方网址:https://www.postman.com/
解压资料文件夹中的软件,安装即可
通常的接口测试查看请求和响应,下面是登录请求的测试 注意要选择第4条数据 这里JSON为
结果: 如果把手机和密码设置为空返回结果是:
如果密码设置错误返回结果是:
(1)简介
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是:
-
使得前后端分离开发更加方便,有利于团队协作
-
接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
-
功能测试
Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。
(2)SpringBoot集成Swagger
-
引入依赖,在heima-leadnews-model和heima-leadnews-common模块中引入该依赖
只需要在heima-leadnews-common中进行配置即可,因为其他微服务工程都直接或间接依赖即可。
- 在heima-leadnews-common工程中添加一个配置类
新增:com.heima.common.swagger.SwaggerConfiguration
在heima-leadnews-common模块中的resources目录中新增以下目录和文件
文件:resources/META-INF/Spring.factories
(3)Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口文档,常用Swagger注解如下:
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数的描述信息
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数的描述信息
@ApiImplicitParam属性:
属性 | 取值 | 作用 |
---|---|---|
paramType | 查询参数类型 | |
path | 以地址的形式提交数据 | |
query | 直接跟参数完成自动映射赋值 | |
body | 以流的形式提交 仅支持POST | |
header | 参数在re【【微信】】 里边提交 | |
form | 以form表单的形式提交 仅支持POST | |
dataType | 参数的数据类型 只作为标志说明,并没有实际验证 | |
Long | ||
String | ||
name | 接收参数名 | |
value | 接收参数的意义描述 | |
required | 参数是否必填 | |
true | 必填 | |
false | 非必填 | |
defaultValue | 默认值 |
我们在ApUserLoginController中添加Swagger注解,代码如下所示:
LoginDto
启动user微服务,访问地址:http://localhost:51801/swagger-ui.html 点击接口后,可以测试 输入测试的参数 测试结果:
(1)简介
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
gitee地址:https://gitee.com/xiaoym/knife4j
官方文档:https://doc.xiaominfo.com/
效果演示:http://knife4j.xiaominfo.com/doc.html
(2)核心功能
该UI增强包主要包括两大核心功能:文档说明 和 在线调试
-
文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
-
在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
-
个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息。
-
离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件。
-
接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接
(3)快速集成
- 在heima-leadnews-common模块中的文件中引入的依赖,如下:
- 创建Swagger配置文件
在heima-leadnews-common模块中新建配置类
新建Swagger的配置文件文件,创建springfox提供的Docket分组对象,代码如下:
以上有两个注解需要特别说明,如下表:
注解 | 说明 |
---|---|
该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加 | |
该注解是提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加 |
- 添加配置
在Spring.factories中新增配置
- 访问
在浏览器输入地址:http://localhost:51801/doc.html
调试如下:
接口文档:
(1)在heima-leadnews-gateway导入以下依赖
pom文件
(2)在heima-leadnews-gateway下创建heima-leadnews-app-gateway微服务
引导类:
bootstrap.yml
在nacos的配置中心创建dataid为leadnews-app-gateway的yml配置
环境搭建完成以后,启动项目网关和用户两个服务,使用postman进行测试
请求地址:http://localhost:51601/user/api/v1/login/【【微信】】 这里注意,地址中一定要含有/user因为网关配置中声明了
思路分析:
- 用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录
- 用户登录成功,后台管理微服务签发JWT TOKEN信息返回给用户
- 用户再次进入网关开始访问,网关过滤器接收用户携带的TOKEN
- 网关过滤器解析TOKEN ,判断是否有权限,如果有,则放行,如果没有则返回未认证错误
具体实现:
第一:
? 在认证过滤器中需要用到jwt的解析,所以需要把工具类拷贝一份到网关微服务
第二:
在网关微服务中新建全局过滤器:
测试:
天气炎热适合煮什么清热解暑凉茶 夏日炎炎推荐消暑凉茶
天气炎热适合煮什么清热解毒的汤,热天煮什么吃能清热解毒,天气热煲什么汤解暑,天气太热煲什么汤解暑炎炎夏日里喝一杯凉茶,解渴消暑又养生。在此,上海中医药大学附属岳阳医院为大家带来了8款实用凉茶的制作方法,本周将为大家推荐前4款,趁着周末赶紧自己动手试一下吧。
1.荷叶凉茶
原料:半张荷叶,滑石、白术各10克,甘草6克,水若干。
制作:将荷叶撕成碎片,与滑石、白术和甘草一同放入水中,煮20分钟左右,去渣取汁,加少量白糖搅匀,冷却后饮用。
功效:防暑降温。
2.银菊鱼腥草凉茶
原料:金银花、菊花、鱼腥草各3-5克,或可用金银花、菊花、夏枯草、桑叶各3-5克。
制作:加水适量,煮5分钟左右,去渣取汁饮用。
功效:疏散风热,对天热引起的发热头痛、鼻塞流涕、咽喉肿痛、目赤畏光等症状有一定缓解作用。
3.山楂金银花凉茶
原料:山楂、金银花、陈皮、黄芩、桔梗、元参、花粉各9克,绿茶10克,白糖适量。
制作:用适量沸水泡半小时,即可饮用。
功效:防暑解热,对中暑先兆症状如头昏、食欲不振等也有治疗作用。
4.银菊凉茶
原料:金银花、菊花、茵陈各3克,生甘草2克。
制作:沸水泡开,代茶饮。
功效:清凉解暑、清热解毒,适用于咽喉易肿痛、长痘生疖者。
猜你喜欢:
走生态优先新路子!徐汇绿色低碳重点项目正在建设中天钥桥路上的这家银行重新开业啦!可它为啥从二楼搬到了一楼?“大思政课”怎样让学生爱听能信?听他们多维度阐述“教・育・党・建”
原标题:《炎炎夏日,来一杯清热解暑的凉茶吧》
阅读原文