最新文章微服务框架学习笔记
微服务微服务是一种软件架构风格,它是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。
微服务拆分什么时候拆分?
创业型项目:先采用单体架构,快速开发,快速试错。随着规模扩大,逐渐拆分。
确定的大型项目:资金充足,目标明确,可以直接选择微服务架构,避免后续拆分的麻烦。
怎么拆分?从拆分目标来说,要做到:
高内聚:每个微服务的职责要尽量单一,包含的业务相互关联度高、完整度高。
低耦合:每个微服务的功能要相对独立,尽量减少对其它微服务的依赖。
从拆分方式来说,一般包含两种方式:
纵向拆分:按照业务模块来拆分
横向拆分:抽取公共服务,提高复用性
黑马商城以黑马商城为例,原来所有业务都在一个单体项目里,现在我们可以把他拆分为以下五个微服务
用户服务
商品服务
订单服务
购物车服务
支付服务
下面是拆分完毕的项目结构,这里因为测试了负载均衡,所以启动了两个商品微服务实例
注册中心在微服务远程调用的过程中,包括两个角色:
服务提供者:提供接口供其它微服务访问,比如item-service
服务消费者:调用其它微服务提供的接口,比如cart-service
在大型微 ...
信工外卖项目总结
Github仓库:https://github.com/dongzhengru/xg-take-out
演示地址:http://xgto.zhengru.top
博客:https://blog.zhengru.top
项目原作者:黑马程序员
信工外卖是一个前后端分离的外卖点餐系统,项目后端采用SpringBoot开发。本文是对信工外卖项目后端各个功能实现的简单回顾,功能大致可以分为管理端和用户端。
项目概览功能模块
基础数据模块
分类管理
员工管理
套餐管理
点餐业务模块
店铺营业状态
微信登录
缓存商品
购物车
用户下单
订单支付和管理
历史订单
订单状态定时处理
来单提醒和客户催单
统计报表模块
图形报表统计
Excel报表统计
项目技术栈
用户层
Node.js
Vue.js
ElementUI
微信小程序
Apache Echarts
网关层
Nginx
应用层
Spring Boot
Spring MVC
Spring Task
HttpClient
Spring Cache
JWT
阿里云OSS
Swagger
POI
WebSocket
数据 ...
总结SpringBoot文件上传的几种方式
写在前面应用开发过程中,文件上传是一个基础的扩展功能,本文梳理一下在SpringBoot当中文件上传所涉及的技术及实现,内容主要包括两部分,上传到服务器本地,以前的文章已经写得比较详细了,包括了单文件、多文件的上传,可以跳转至SpringBoot随记了解,另一部分是使用对象存储服务(比如阿里OSS、MinIO等)来存储上传的文件,也是比较主流的一种方式,本站就是使用了腾讯云的对象存储服务搭建的静态网站,还有现在写了一半的一个外卖平台项目,其中菜品的图片资源就存储在阿里OSS上,项目仓库:xg-take-out。
MinIOMinIO是一款高性能高可用的文件系统服务。
可以使用下面的命令在本地的Docker部署一下
后台管理端口9090,文件上传端口9000
docker run -p 9000:9000 -p 9090:9090 --name minio -d -e "MINIO_ROOT_USER=xxxxx" -e "MINIO_ROOT_PASSWORD=xxxxx" -v C:/DockerVolumes/minio/data:/data -v C:/DockerVolumes ...
关于解决docker中nginx反向代理请求后端的502错误
场景在本地docker上用nginx部署项目前端的时候遇到的一个问题
页面可以正常预览,但是反向代理向后端发起请求时报502 Bad Gateway,如图
先看一下我nginx的配置
解决思路使用宿主机的postman直接测试后端接口是没问题的
确保后端服务正常运行的情况下,又去容器内部再测试了一下,发现无法向宿主机目标端口发出请求
观察日志可以发现使用docker部署时,127.0.0.1指向的是容器内部的ip
看了一下宿主机的ip地址是192.168.0.100,那么可以修改一下反向代理的配置
location /api/ {
proxy_pass http://192.168.0.100:8080/admin/;
tcp_nodelay on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-F ...
Linux随记
配置信息
Linux镜像:CentOS-7-x86_64-DVD-2009.iso
FinalShell:4.0.1 官网地址
VMware 17 Pro:仅做个人学习使用
本文主要根据黑马笔记,做了一定增删
前言前段时间一直在学习EE和deeplearning(没什么成效),今天开始换换口味学习一下Linux常用的命令,本文只对Linux部分常用的命令和指令进行记录,不涉及开发环境和软件的安装(建议移步CSDN)
配置VM固定IP修改子网IP和NAT设置中的网关IP
修改文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 改为static,固定IP
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no" ...
SpringSecurity学习笔记
前言上篇文章也说了,这两天我又把SpringSecurity看了一遍,记得之前看的时候就只看到加密然后被一个bug卡了一天就去看别的了,现在重新看顺便把之前没做完的笔记补一补,下面基本是根据三更草堂的笔记整理过来的
完整流程图
SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器
UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要有它负责。
ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和AuthenticationException 。
FilterSecurityInterceptor:负责权限校验的过滤器。
Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。
AuthenticationManager接口:定义了认证Authentication的方法
UserDetailsService接口:加载用户特定数据的核心接口。里面定义了 ...
关于从Redis中取缓存用户信息时报错ClassCastException
写在前面因为之前没有系统的看过SpringSecurity,而且之前在写微人事的时候没有采用JWT的认证方式,所以最近打算把SpringSecurity再重新看一遍,顺便熟悉一下怎么使用JWT的认证方式(不知道为什么是重新,之前好像也没怎么看过
demo介绍简单介绍一下,问题主要出在下面这两个地方
自定义的登录接口
调用ProviderManager的方法进行认证,如果认证通过生成jwt
把用户信息存入redis中,这里键值对中的键是"login:" + userid,值即是用户认证信息
认证部分没什么问题就略过不放了,存入redis核心代码如下
LoginUser loginUser = (LoginUser) authenticate.getPrincipal();
String userid = loginUser.getUser().getId().toString();
String jwt = JwtUtil.createJWT(userid);
redisCache.setCacheObject("login:" + userid, loginU ...
微人事复盘和前后端分离项目部署
项目原作者:江南一点雨
项目原地址:https://github.com/lenve/vhr
Github仓库:https://github.com/dongzhengru/vhr
演示地址:http://vhr.zhengru.top
本文是对于开发vhr中遇到的一些问题记录一下解决的思路,当然很多内容都来自于项目原作者,以及第一次部署前后端分离项目的记录
项目介绍微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发,项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等。
项目技术栈后端技术栈
Spring Boot
Spring Security
MyBatis
MySQL
Redis
RabbitMQ
Spring Cache
WebSocket
...
前端技术栈
Vue
ElementUI
axios
vue-router
Vuex
WebSocket
vue-cli4
...
发现、解决的问题下面是一些我在开发过程当中发现了原作者的一些bug
权限组删除问题删除角色的时候,如果角色还有权限,那么权限并不会 ...
高数(下)公式
多元函数
空间几何向量
二重积分
曲线积分
格林公式
无穷级数
微分方程
关于接口请求地址末尾斜杠的问题
在做vhr的时候遇到的一个问题
先看一下,这是一个获取职位信息的接口
地址是/system/basic/pos
我们在postman中不加斜杠调用这个接口
可以发现报了404
如果末尾加上斜杠,才能获取到职位信息
在HTTP中,URL的结尾没有斜杠(/)时,表示请求的是一个具体的资源,比如一个HTML文件或一个图片
而如果URL以斜杠结尾,表示请求的是一个目录或者一个文件夹。
在Postman中,如果在请求URL的末尾没有加上斜杠,则Postman将其解释为文件资源而不是目录资源
因此,如果请求的是一个API接口,而且没有在末尾添加斜杠,则Postman会认为你要请求的是一个文件资源而不是API接口,因此就会返回404错误
而在浏览器中,如果请求URL的末尾没有斜杠,浏览器会自动添加斜杠并重新发送请求,即使你没有在URL的末尾添加斜杠,浏览器也可以正确地请求API接口