使用谷歌的guava 对微服务的某一具体方法进行限流
摘要:nginx和gateway网关都是对整个系统进行访问限流 通过guava可以精确的对一个方法进行限流,基于令牌桶算法,我们通过AOP创建一个注解 首先引入坐标 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</ar
阅读全文
posted @
2021-01-29 20:15
wuzi2333
阅读(315)
推荐(0)
在项目中实现rabbitmq的可靠投递 与 可靠接收
摘要:可靠投递 原理 rabbitmq基于confirm模式、持久化策略,使用redis作为消息的临时储存空间 首先开启rabbitmq的confirm和持久化策略(可持久的对象为交换机、队列、消息) 1 开启confirm,在配置文件application.yml中 spring: rabbitmq:
阅读全文
posted @
2021-01-28 19:57
wuzi2333
阅读(119)
推荐(0)
rabbitmq的数据持久化
摘要:rabbitmq的数据是存在内存中的,我们可以对数据进行持久化,在意外宕机或重启服务器时,保护数据 可以持久化的数据有:交换机、队列、消息 交换机的持久化 在springboot项目的rabbitmq的配置类中在声明交换机时进行持久化 @Bean(EX_BUYING_ADDPOINTUSER) pu
阅读全文
posted @
2021-01-28 15:32
wuzi2333
阅读(469)
推荐(0)
使用window对象实现倒计时
摘要:定义在vue的methods中, loadMenus已被钩子函数调用 app.alltimes是五个剩余的时间,每个都需要递减,单位是毫秒 注意开启倒计时用setInterval,关闭倒计时用clearInterval var app = new Vue({ el: '#app', data() {
阅读全文
posted @
2021-01-27 17:06
wuzi2333
阅读(258)
推荐(0)
将毫秒转为HH:mm:ss
摘要://将毫秒转换成时分秒 timedown:function(num) { var oneSecond = 1000; var oneMinute=oneSecond*60; var oneHour=oneMinute*60 //小时 var hours =Math.floor(num/oneHour
阅读全文
posted @
2021-01-27 16:50
wuzi2333
阅读(311)
推荐(0)
Vue中的 :class 和 :style
摘要:Vue中的 :class 和 :style 1. :class = “a” 说明 vue 中有个叫 a 的属性 这个标签的class 就是 a的值 2. :class = “{ active:isactive }” Active的存在取决于 isactive的值,为true就说明存在,为false就
阅读全文
posted @
2021-01-27 16:16
wuzi2333
阅读(1057)
推荐(0)
moment.min.js+Vue过滤器 实现格式化页面时间
摘要:moment.min.js的内容为 !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(
阅读全文
posted @
2021-01-27 15:14
wuzi2333
阅读(213)
推荐(0)
时间工具类 将一个日期转为yyMMdd格式、获取某天的凌晨、时间增加几分钟、时间增加几小时、获取时间菜单(用于畅购秒杀展示前端页面的五个时间段)
摘要:package com.changgou.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar;
阅读全文
posted @
2021-01-26 19:25
wuzi2333
阅读(513)
推荐(0)
RedisTemplate序列化
摘要:一种说法是 在把RedisTemplate注入Spring容器的时候,如果不设置RedisTemplate的序列化,在Redis存数据的时候,key前边追加了一些编码数据,加上这个设置会把这些编码数据给去掉 我不知道为什么,但是如果报“org.springframework.data.redis.s
阅读全文
posted @
2021-01-26 17:34
wuzi2333
阅读(390)
推荐(0)
SpringTask spring提供的定时任务
摘要:1 Cron表达式 cron表达式一共七个域分别代表 秒 分 时 日 月 星期 年 如无特殊情况,年可以省略,每年执行 通配符说明: * 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。 例如:要在每月的10号触发一
阅读全文
posted @
2021-01-26 17:27
wuzi2333
阅读(150)
推荐(0)
ConvertUtils 数据流转为字符串
摘要:package com.changgou.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /** * 转换工具类 */ public class C
阅读全文
posted @
2021-01-24 13:27
wuzi2333
阅读(224)
推荐(0)
POM中指定编译版本
摘要:<properties> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <project.reporting.outputEncoding>utf-8</project.reporting.outputEncod
阅读全文
posted @
2021-01-22 21:55
wuzi2333
阅读(198)
推荐(0)
微信支付 注册步骤、文档、项目应用、接收通知,返回通知、使用STOMP实现浏览器和服务器双工通信
摘要:注册微信支付的步骤 第一步:注册公众号(类型须为:服务号) 请根据营业执照类型选择以下主体注册:个体工商户| 企业/公司| 政府| 媒体| 其他类型。 第二步:认证公众号 公众号认证后才可申请微信支付,认证费:300元/次。 第三步:提交资料申请微信支付 登录公众平台,点击左侧菜单【微信支付】,开始
阅读全文
posted @
2021-01-22 21:54
wuzi2333
阅读(1510)
推荐(0)
打包一个下载的sdk
摘要:有些sdk是仓库没有的,需要我们手动下载然后打包 下载好后,找到jdk文件所在的地方,如果没由jdk可以直接用Idea打包,打开cmd mvn install:install-file -DgroupId=com.github.wxpay -DartifactId=wxpay-sdk -Dversi
阅读全文
posted @
2021-01-22 17:28
wuzi2333
阅读(107)
推荐(0)
消息队列实现分布式事务管理
摘要:原理图 任务目标 当用户下单时,会增加与支付金额数相等的积分,在订单模块中完成下单,远程调用用户模块中的增加积分的操作,这里连个模块用rabbimq完成事务管理 环境准备 数据库中准备三张表 changgou_order中有两张,tb_task用于储存等待处理的任务,tb_task_his用于存储已
阅读全文
posted @
2021-01-21 21:33
wuzi2333
阅读(415)
推荐(0)
Fescar的AT模式演示
摘要:准备工作 首先导入模块day12的changgou_common_fescar 目录结构如下 里面重要的是一个配置类,一过滤器,一个拦截器 配置类FescarAutoConfiguration如下 package com.changgou.fescar.config; import com.alib
阅读全文
posted @
2021-01-21 15:56
wuzi2333
阅读(188)
推荐(0)
Seata(Fescar)
摘要:Seata(原名Fescar) 是阿里18年开源的分布式事务的框架。Fescar的开源对分布式事务框架领域影响很大。作为开源大户,Fescar来自阿里的GTS,经历了好几次双十一的考验,一经开源便颇受关注。后来Fescar改名为Seata。 Fescar虽然是二阶段提交协议的分布式事务,但是其解决了
阅读全文
posted @
2021-01-20 18:49
wuzi2333
阅读(870)
推荐(0)
分布式事务,CAP理论,Basic理论
摘要:@Transactional 注解只能控制本模块中的事务,称为本地事务 但在分布式系统中,多个服务之间,本地事务不能控制其他模块的事务 我们需要分布式事务 分布式事务CAP理论 Consistency一致性Availability可用性Partition tolerance分区容错性 注意CAP不可
阅读全文
posted @
2021-01-20 16:24
wuzi2333
阅读(419)
推荐(0)
Feign的拦截器,用于在微服务间使用feign远程调用其他微服务时,传递令牌
摘要:package com.changgou.interceptor; import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.beans.factory.annotation.A
阅读全文
posted @
2021-01-20 15:27
wuzi2333
阅读(360)
推荐(0)
雪花算法工具类
摘要:package com.changgou.util; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkInterface; /** * <p>名称:I
阅读全文
posted @
2021-01-19 19:18
wuzi2333
阅读(1347)
推荐(0)
oauth2 未登录用户访问时自动跳转到登录页面,并记录当前页面,登陆后自动跳回
摘要:实现不复杂,但比较繁琐,建议结合项目查看 首先,我们的登录验证基于网关服务,如果网关没有检测到cookie中由jti或者没有找到对应的jwt,我们认为用户没有登录 此时要跳转到登录页面 网关是基于过滤器实现的,过滤器为 @Component public class AuthFilter imple
阅读全文
posted @
2021-01-18 21:52
wuzi2333
阅读(4292)
推荐(0)
从令牌中获取载荷
摘要:使用时在引导类用@bean注入 在需要用的地方@AutoWired注入 package com.changgou.order.config; import com.alibaba.fastjson.JSON; import org.springframework.core.io.ClassPathR
阅读全文
posted @
2021-01-18 21:01
wuzi2333
阅读(244)
推荐(0)
oauth2 微服务之间的认证 使用feign拦截器转发令牌
摘要:当我们做购物车时,出现一个需求,用户->网关->页面渲染服务->订单查询服务 网关给页面渲染服务时带着令牌(由网关直接写入request的header) 页面渲染服务需要调用订单查询服务里的查询购物车,通过feign的形式去调用,但是由于订单查询受oauth2保护,feign无法直接传递令牌,令牌到
阅读全文
posted @
2021-01-18 20:17
wuzi2333
阅读(883)
推荐(0)
Oauth2 用户授权
摘要:我们可以把用户的权限写在令牌的载荷里 这是一个解析完的令牌,其中的authorities就是权限 {"scope":["app"],"name":null,"id":null,"exp":1610927779,"authorities":["seckill_list","goods_list"],"
阅读全文
posted @
2021-01-17 21:29
wuzi2333
阅读(543)
推荐(0)
CookieUtils
摘要:package com.changgou.oauth.util; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet
阅读全文
posted @
2021-01-16 20:04
wuzi2333
阅读(174)
推荐(0)
Oauth2-授权码模式与密码模式获取jwt令牌,以及校验、刷新jwt令牌
摘要:Oauth2查询的存有客户端(不是个人用户,而是第三方登录时 人-客户端-第三方的那个客户端)账号密码的表必须叫oauth_client_details Oauth2有以下授权模式: 1.授权码模式(Authorization Code) 2.隐式授权模式(Implicit) 3.密码模式(Reso
阅读全文
posted @
2021-01-15 21:09
wuzi2333
阅读(3079)
推荐(0)
单点与第三方登录登录
摘要:单点登录 一处登录,处处登录 区别于第三方登录,单点登录要求用户在本系统中有注册的账号 通常将用户的登录信息存放在redis中 目前常用的登录框架 Apache Shiro CAS Spring security 第三方登录 第三方登录中最重要的问题是解决登录协议的问题 目前最主流的协议是OAUTH
阅读全文
posted @
2021-01-15 18:36
wuzi2333
阅读(916)
推荐(0)
canal实现当数据库改变时,同步数据到redis
摘要:思路 canal感知sql的改变,作为消息的提供者将消息(图片的postion属性,指图片位于网页的位置)放到rabbitmq的队列,nginx作为消息的消费者,获取消息,并通过Lua脚本更新数据 第一步,将消息放到消息队列 启动类上加上 @EnableCanalClient //声明当前服务是ca
阅读全文
posted @
2021-01-12 14:39
wuzi2333
阅读(1479)
推荐(1)
数据监控 Canal
摘要:canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal是应对阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。 阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。 canal将自己伪装成sql的备
阅读全文
posted @
2021-01-11 21:37
wuzi2333
阅读(486)
推荐(0)
SPU与SKU
摘要:SPU = Standard Product Unit (标准产品单位) 概念 : SPU 是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。 通俗点讲,属性值、特性相同的货品就可以称为一个 SPU 例如:华为P30 就是一个 SPU SKU=stock
阅读全文
posted @
2021-01-09 20:34
wuzi2333
阅读(188)
推荐(0)
snowflake雪花算法生成全局唯一的id
摘要:常见的三种唯一id生成方式 1 UUID 常见的方式。可以利用数据库也可以利用程序生成,一般来说全球唯一。 优点: 1)简单,代码方便。 2)生成ID性能非常好,基本不会有性能问题。 3)全球唯一,在遇见数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。 缺点: 1)没有排序,无法保证趋
阅读全文
posted @
2021-01-09 20:29
wuzi2333
阅读(1392)
推荐(0)
JWT 简单的jwt使用及简单的项目使用,公私钥的生成
摘要:JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。 未加密前的jwt就是一个json 头部:头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算
阅读全文
posted @
2021-01-09 19:57
wuzi2333
阅读(9428)
推荐(0)
全局异常处理类
摘要:商城项目第一次遇到,controller里不处理异常,而是在本模块下创建一个全局的异常处理类,自动捕获异常,并返回提示 //统一异常处理器@ControllerAdvice //声明该类是一个增强类(全局类)public class BaseExceptionHandler { @Exception
阅读全文
posted @
2021-01-08 14:36
wuzi2333
阅读(370)
推荐(0)
linux分区扩容(VM虚拟机)
摘要:Linux分区满了,需要扩容,搜了很多资料,终于找到一个可以用的,但是原文章有一些小错误,我再次整理一下以备不时之需 1 首先用df -h命令查看剩余空间 可以看到我们的磁盘就快完蛋了 2 我们用VM重新指定一下linux硬盘大小 设置好后,只是从你的电脑里分了10G空间给虚拟机,但是这10G目前还
阅读全文
posted @
2021-01-05 15:28
wuzi2333
阅读(406)
推荐(0)