自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiazhiyou

越努力,越幸运^_^

  • 博客(32)
  • 收藏
  • 关注

原创 订单业务减库存 -- 分布式事务问题与高并发解决线程安全问题

减库存可以采用同步调用(商品微服务提供接口,通过Feign调用),也可以采用异步调用(通过RabbitMq),我们采用同步调用,接下来我们来分析分析原因。若采用异步调用的方式,我们要进行减库存,只需向RabbitMq中发送消息即可,后续我们不管,但是否减库存成功我们不得而知。若库存不足,则减库存失败,但是订单微服务中并不知道减库存失败,因此事务不会回滚,这就是分布式事务问题 (跨服务的事务)。我...

2019-06-12 11:26:06 6287 1

原创 Jwt与RSA非对称加密

Jwt与RSA加密1. 无状态登录原理1.1 什么是有状态?1.2 什么是无状态1.3 如何实现无状态1.4 JWT1.4.1 简介1.4.2 数据格式1.4.3 JWT交互流程1.4.4 非对称加密1.5 结合Zuul的鉴权流程1.5.1 没有RSA加密时1.5.2 结合RSA的鉴权1. 无状态登录原理在分布式系统当中,传统的登录会失效(原因:各微服务间用的不是同一台tomcat,我们以前登...

2019-06-05 21:33:46 9763 8

原创 消息队列-Rabbitmq处理消息及在Spring中的应用

消息队列-Rabbitmq1 什么是消息队列2 AMQP和JMS3 常见MQ产品4 RabbitMQ4.1 五种消息模型4.1.1 基本消息模型4.1.2 work消息模型4.1.3 订阅模型分类4.1.3.1 订阅模型-Fanout4.1.3.2 订阅模型-Direct4.1.3.3 订阅模型-Topic1 什么是消息队列消息队列,即MQ,Message Queue。消息队列是典型的:生...

2019-06-04 17:45:55 1894

原创 乐优商城--nginx反向代理

nginx1. 使用域名访问本地项目写在nginx之前的一些内容~为了项目优雅起见,我们都采用域名来访问。例:一级域名:www.leyou.com    二级域名:manage.leyou.com在浏览器输入域名时,浏览器会根据域名找到对应的ip和端口(域名解析)域名解析一个域名一定会被解析为一个或多个ip。这一般会包含两步:本地域名解析浏览器会首先在本机的hosts文件中...

2019-05-22 22:52:28 3191 2

原创 KMP算法的详细讲解

KMP算法KMP算法是一种改进的字符串匹配算法。讲述KMP算法之前,我们要先建立一个概念,没有这个概念,KMP很难理解。那,我们先忘掉原问题,来进行一个概念建设。这个概念就是:在一个字符串中,一个字符之前的字符串最长前缀和最长后缀的匹配长度,有点绕,我们举个例子吧: 对于字符d,我们想求一个信息,就是d之前的字符串最长前缀和最长后缀的匹配,同时我们要加一个限定:前缀不能包含最后一个字符,...

2019-04-25 12:11:28 1400 3

原创 JVM内存区域

文章目录1. JVM1.1 程序计数器(线程私有)1.2 虚拟机栈(线程私有)1.3 本地方法区(线程私有)1.4 堆(Heap-线程共享) -运行时数据区1.5 方法区/永久代(线程共享)2. JVM 运行时内存2.1 新生代2.1.1 Eden 区2.1.2 ServivorFrom2.1.3 ServivorTo2.1.4 MinorGC 的过程(复制->清空->互换)2.2 老...

2019-11-15 15:15:50 1016

原创 内存泄漏和内存溢出,解决办法

1. 内存泄漏和内存溢出,解决办法1.1 内存泄露指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统奔溃等严重后果。 一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。即为:不再会被使用的对象的内存不能被回收,就是内存泄露内存泄漏具有隐蔽性,积累性的特征,比其他内存非法访问错误更难检测。这是因为内存泄漏产生的原因是内存...

2019-11-15 15:14:57 2382 1

原创 Manacher算法的详细讲解

Manacher算法Manacher算法:在一个字符串中找到最长回文串。回文:正着念和反着念一样的东西。“121”,“1221”.第一种方法:暴力解。分为两种情况== 思路 ==...

2019-08-03 09:34:36 914

原创 Thymeleaf

Thymeleaf是用来开发Web和独立环境项目的现代服务器端Java模板引擎。Thymeleaf的主要目标是为我们的开发工作流程带来优雅的自然模板 - HTML(前后端人员都可以运行)。可以在直接浏览器中正确显示,并且可以作为静态原型,从而在开发团队中实现更强大的协作。Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和Freemarker等,而Thymeleaf...

2019-06-17 14:57:29 1422 1

原创 乐优商城

乐优商城项目概述:1. 项目介绍1.1 系统架构1.1.1 架构图1.1.2 系统架构解读1.2 技术选型1.2.1 前后端相关技术1.2.2 相关技术解读2. 微服务2.1 系统架构2.1.1 集中式架构2.1.2 垂直拆分2.1.3 分布式服务2.1.4 微服务2.2 服务间远程调用方式2.1.1 RPC2.1.2 Http2.1.3 两者比较3. 后端微服务3.1 注册微服务:LyReg...

2019-06-13 11:36:35 3678 6

原创 idea项目打包

打包步骤:1. 修改项目结构2. 引入插件3. 打包4. 运行1. 修改项目结构例如:以下就是ly-item-service的所有依赖,其中就包含ly-common与ly-item-interface,我们勾选上,将来在ly-item-service包里就会把这两个打包进去2. 引入插件<build> <plugins> <plugi...

2019-06-13 11:23:39 2835

原创 乐优商城-微信支付

微信支付:1. 介绍2. 开发流程3. 下单并生成支付链接3.1 API说明1. 介绍微信支付官方文档:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F选择扫码支付:此处我们使用模式二来开发2. 开发流程模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。商户后台系统先调用微信支付的统一...

2019-06-13 10:21:22 1279 2

原创 乐优商城--服务(十一) :订单微服务(LyOrderApplication)

订单微服务:1. 页面分析2. 创建订单微服务2.1 引入依赖2.2 配置2.3 启动类2.4 添加路由1. 页面分析在购物车页面的最下方,有一个去结算按钮:当点击结算,我们应该跳转到订单结算页,而不是直接付款可以看到,此处页面需要渲染的内容主要包含3部分:收货人信息支付方式商品信息点击提交订单按钮,然后需要把商品信息发到后台去完成订单创建,因此应创建订单微服务2. 创建...

2019-06-12 14:47:22 2099

原创 乐优商城--服务(十) :购物车微服务(LyCartApplication)

购物车微服务:1. 购物车功能分析1.1 需求1.2 业务分析1.3 流程图2.未登录购物车-- Localstorage2.1 购物车的数据结构2.2 web本地存储2.2.1 什么是web本地存储?2.2.2 LocalStorage的用法2.3 添加购物车2.3.1 页面分析2.3.2 实现查询所有sku接口3. 登录购物车-- Redis3.1 搭建项目3.1.1 引入依赖3.1.2 配置...

2019-06-10 21:12:14 2392 4

原创 项目系统架构-微服务框架

系统架构演变1. 系统架构1.1 集中式架构1.2 垂直拆分1.3 分布式服务1.4 微服务2. 服务间远程调用方式2.1 RPC2.2 Http2.3 两者比较1. 系统架构1.1 集中式架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。存在的问题:代码耦合,开发维护困难无...

2019-06-05 22:22:49 2950

原创 乐优商城--关于微服务的安全问题

1.微服务地址如果不消息暴露,如何处理?首先地址不会暴露,因为所有微服务都是通过zuul进行访问(微服务之间通过局域网进行访问,不经过外网),对外暴露的只有Zuul。其实Zuul也没有真正暴露,因为Zuul还进行了nginx反向代理。真正对外暴露外网ip的是nginx。万一暴露了呢?服务间鉴权:我们需要在后台管理系统中专门有一套权限管理的页面,它来管理各个微服务及微服务与微服务之间的...

2019-06-04 17:12:06 994

原创 乐优商城--服务(九) :授权微服务(LyAuthApplication)--后半部分

授权微服务--后半部分2.4 ****解决cookie写入问题2.4.1 问题分析2.4.2 跟踪CookieUtils2.4.3 解决host地址的变化2.4.4 再次测试2.4.5 Zuul的敏感头过滤2.4.6 最后的测试3. 首页判断登录状态3.1 页面JS代码3.2 后台实现校验用户接口3.3 测试3.4 刷新token4. 网关的登录拦截器4.1 引入jwt相关配置4.2 编写过滤器逻...

2019-06-04 15:25:53 1628

原创 乐优商城--服务(九) :授权微服务(LyAuthApplication)--前半部分

授权微服务1. 无状态登录原理1.1 什么是有状态?1.2 什么是无状态1.3 如何实现无状态1.4 JWT1.4.1 简介1.4.2 数据格式1.4.3 JWT交互流程1.4.4 非对称加密1.5 结合Zuul的鉴权流程1.5.1 没有RSA加密时1.5.2 结合RSA的鉴权2. 授权中心2.1 搭建项目2.1.1 引入依赖2.1.1.1 父工程ly-auth2.1.1.2 ly-auth-co...

2019-06-04 10:25:25 2262

原创 乐优商城--服务(八) :短信微服务(LySmsApplication)

短信微服务1. 搭建项目1.1 引入依赖1.2 配置1.3 启动类2. 编写短信工具类2.1 属性抽取2.2 工具类3. 编写消息监听器4. 发送短信功能4.1.接口说明4.2 Redis4.3 测试因为系统中不止注册一个地方需要短信发送,因此我们将短信发送抽取为微服务:ly-sms,凡是需要的地方都可以使用。另外,因为短信发送API调用时长的不确定性,为了提高程序的响应速度,短信发送我们都将...

2019-06-04 10:13:47 1680

原创 乐优商城--服务(七) : 用户中心微服务(LyUserApplication)

用户中心微服务1. 搭建项目1.1 引入依赖1.1.1 父工程ly-user的pom1.1.3 ly-user-interface1.1.2 ly-user-service1.2 配置1.3 启动类1.4 添加网关路由2. 后台功能准备2.1 接口文档2.1.1 数据校验2.1.2 生成短信验证码2.1.3 用户注册2.1.4 根据用户名和密码查询用户2.2 数据结构2.3 实体类2.3 实体类3...

2019-06-03 11:20:37 3844

原创 Redis

redis1. NoSql2. redis页面静态化方案是一种解决商品并发高非常有效的手段,但是很多情况下我们还要用redis做缓存。redis是目前非常流行的一款NoSql数据库。1. NoSqlNoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Fac...

2019-06-02 16:31:03 1020

原创 乐优商城--服务--优化搜索微服务和页面微服务

优化搜索和页面微服务1. 消息队列(MQ)1.1 什么是消息队列1.2 AMQP和JMS1.3 常见MQ产品1.4 RabbitMQ1.4.1 五种消息模型1.4.1.1 基本消息模型1.4.1.2 work消息模型1.4.1.3 订阅模型分类1.4.1.3.1 订阅模型-Fanout1.4.1.3.2 订阅模型-Direct1.4.1.3.3 订阅模型-Topic1.4.2 持久化2. 项目改造...

2019-06-02 15:06:55 1496

原创 乐优商城--服务(六) : 页面微服务(LyPageApplication)

页面微服务1. Thymeleaf2. 搭建项目2.1 引入依赖2.2 配置2.3 启动类2.4 页面模板3. 页面跳转3.1 跳转路径3.2 nginx反向代理4. 商品微服务提供接口4.1 页面分析4.2 查询spu接口4.3 查询规格参数组5. 创建FeignClient6. 实现查询商品详情6.1 web6.2 service7. 页面静态化7.1 简介7.1.1 问题分析7.1.2 什么...

2019-05-31 21:44:42 1364 5

原创 乐优商城--服务(五) : 搜索微服务(LySearchApplication)

搜索微服务0. 引言0.1 Elasticsearch0.2 kibana0.3 操作索引2. 搭建项目2.1 引入依赖2.2 配置2.3 启动类0. 引言0.1 ElasticsearchElasticsearch:全文检索技术。如上所述,Elasticsearch具备以下特点:分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)Restful风...

2019-05-29 12:09:37 2066 8

原创 乐优商城--服务(四) : 上传微服务(LyUploadApplication)

上传微服务:1. 搭建项目1.1 引入依赖1.2 配置1.3 启动类2. 业务2.1 controller2.1.1 页面分析2.1.2 实现业务2.2 service2.3 忽略路由前缀2.4 绕过网关缓存2.5 之前上传的缺陷3.FastDFS3.1 什么是分布式文件系统3.2 什么是FastDFS3.3 FastDFS的架构3.3.1 架构图3.3.2 上传和下载流程3.3.3 安装3.3....

2019-05-27 21:37:11 1300

原创 商品规格数据结构与商品表结构分析

商品规格数据结构与商品表结构分析:1. 商品规格数据结构1.1 规格属性内容1.2 横表与数表1.3 表结构1.3.1 SpecGroup规格组1.3.2 SpecParam规格参数1.4 从面向对象的角度分析2. 商品表结构分析2.1 SPU和SKU2.2 表结构2.2.1 表结构分析2.2.2 SPU表2.2.2.1 spu表结构2.2.2.2 spu_detail 表结构2.2.2.3 s...

2019-05-27 21:36:58 8138 1

原创 乐优商城--服务(三) : 商品微服务(LyItemApplication)--后半部分

商品微服务--后半部分:4.6 商品规格数据结构与商品表结构分析4.7 实现商品规格参数管理4.7.1 规格组查询4.7.1.1 SpecGroup数据表4.7.1.2 SpecGroup实体类4.7.1.3 业务4.7.1.3.1 web4.7.1.3.1.1 页面分析4.7.1.3.1.2 实现业务4.7.1.3.2 service4.7.1.3.3 mapper4.7.2 规格参数查询4.7...

2019-05-27 21:35:30 2389

原创 乐优商城--服务(三) : 商品微服务(LyItemApplication)--前半部分

商品微服务:1. 微服务结构2. 添加依赖3. 启动类4. 配置5. 核心业务5.0 ly-common5.1 接口实体类5.2 工具由于是一个全品类的电商购物平台,那么核心自然就是商品。因此我们要搭建的第一个服务,就是商品微服务。其中会包含对于商品相关的一系列内容的管理,包括:商品分类管理品牌管理商品规格参数管理商品管理库存管理1. 微服务结构由于商品微服务(ly-item...

2019-05-27 21:35:01 3465 3

原创 centos安装FastDFS

Centos下安装FastDFS1.1 下载#新建用户useradd leyou#设置密码passwprd leyou下载jar包下载完成后上传到linux下的 /home/leyou/fdfs (自定义)目录1.2 安装依赖FastDFS运行需要一些依赖,可以按下面方式安装:1.2.1 安装GCC依赖GCC用来对C语言代码进行编译运行,使用yum命令安装:sudo ...

2019-05-25 20:14:17 631

原创 乐优商城--前端概述

商城前端介绍:1. 架构概述2. 技术解读2.1 node和npm2.2 Vue2.3 SPA2.4 Webpack2.5 vue-cli2.4 Vuetify1. 架构概述前端有一套完整的技术栈,将来会去做独立的部署。架构图如下:1.基于node,在node的基础上有npm和webpack,主要用于项目构建管理。npm:项目的依赖管理webpack:项目打包和编译  两者合起来...

2019-05-21 17:19:32 2927

原创 乐优商城--服务(二) : 网关微服务(LyGateway)

网关微服务:LyGateway在前边,我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理;为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故...

2019-05-20 22:22:46 1467

原创 乐优商城--服务(一): 注册微服务(LyRegister)

注册微服务:1. Eureka2. Ribbon3. Hystix4. Feign存在的问题:服务间调用,servicer(提供方)对外提供服务,需要对外暴露自己的地址。而consumer(调用者)需要记录服务提供者的地址。将来地址出现变更,还需要及时更新。不仅开发困难,将来测试、发布上线都会非常麻烦。1. EurekaEureka:负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务...

2019-05-20 22:22:07 1249 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除