- 博客(37)
- 收藏
- 关注
原创 七天学会SpringCloud分布式微服务——06——Sentinel
Sentinel是Alibaba开发的轻量级微服务防护框架,主要提供流量控制、熔断降级和实时监控功能。其核心机制包括:定义资源(如API接口),设置流量规则(QPS限制),在请求超限时进行流量阻断或熔断保护。通过Dashboard可实现实时监控和动态调整规则。配置时需在微服务中设置Sentinel端口,并使用注解标记受保护资源。当触发限流规则时,可通过异常处理返回JSON提示信息。Sentinel通过热点规则、授权规则等多维度策略,有效保障微服务在高并发场景下的稳定性。
2025-06-30 22:09:26
537
原创 七天学会SpringCloud分布式微服务——05——OpenFeign
本文介绍了OpenFeign实现远程调用的详细步骤与配置方法。首先在pom引入依赖,创建FeignClient接口并配置请求映射。随后讲解了OpenFeign的日志实现、超时控制(默认10s连接、60s读取)、重试机制配置(间隔时间与最大次数)。文章还展示了如何配置请求拦截器添加请求头信息,以及通过Sentinel实现Fallback回调机制,在服务调用失败时返回兜底数据。最后需要在yml中开启Sentinel功能来支持熔断。全文涵盖了OpenFeign的核心功能配置,帮助开发者实现可靠的微服务间调用。
2025-06-30 16:21:09
477
原创 七天学会SpringCloud分布式微服务——04——Nacos配置中心
本文介绍了Nacos配置中心的动态刷新与数据隔离功能。主要内容包括:1)当Nacos与本地配置冲突时,Nacos配置优先生效;2)通过配置类绑定实现配置动态刷新,无需重启服务;3)使用监听器实时获取配置变更;4)通过命名空间实现多环境隔离,通过Group区分不同微服务。文章提供了具体实现步骤,包括依赖引入、配置绑定、监听器编写等关键代码示例,帮助开发者快速掌握Nacos配置中心的核心功能。
2025-06-27 14:45:16
706
原创 七天学会SpringCloud分布式微服务——03——Nacos远程调用
本文摘要: 微服务配置分类:通用配置放公共模块(common/config),专属配置放各自服务模块,基础服务配置放对应模块。 Nacos宕机影响:已调用过的服务仍可用,未调用过的不可用。 远程调用方式: 基础方式:通过DiscoveryClient获取实例,用RestTemplate调用。 负载均衡:引入LoadBalancerClient动态选择实例。 注解简化:使用@LoadBalanced修饰RestTemplate,直接通过服务名调用(推荐)。 核心原则:分层配置确保复用与隔离,负载均衡提升调用可
2025-06-26 22:57:40
299
原创 七天学会SpringCloud分布式微服务——02——第一个微服务项目
普通java就可以,不用选springboot,因为父工程已经已经是springboot项目了,子工程也是了,根本原因就是上面这段!在service-product这个具体微服务模块下的pom文件下引入真正的依赖包。去掉依赖引入,因为是父工程,在具体的子项目引入真正的依赖。先在services pom文件下引入依赖。前提是安装Nacos,本地运行起来!可以删除services下的src。完整的父工程pom.xml文件为。最终是这样的,删除无关文件。
2025-06-26 15:03:02
1209
1
原创 七天学会SpringCloud分布式微服务——01——基础概念
就是一个微服务失效(例如:卡顿),引发其他微服务(调用了失效的服务)卡顿,在高并发情况下,导致全部服务器资源耗尽。配置中心 :统一管理所有配置修改,避免每台服务器中相同的微服务有不同的配置信息。就是一种快速失败机制,当服务调用次数超过一定次数后,依旧不可用,直接返回。分布式事务: 涉及到不同数据库保证原子性,例如去库存与下订单。扩容、缩容、负载均衡。
2025-06-24 21:50:17
467
原创 理解RocketMQ顺序消息的全局有序消息和分区有序消息、延迟消息、事务消息
类型顺序粒度队列数并发性吞吐量使用场景全局有序所有消息1差低极端顺序要求(交易流水)分区有序每个分区内有序多好高订单系统、用户行为日志等当消息写入到Broker后,在指定的时长后才可被消费处理的消息,称为延时消息。从 RocketMQ 的存储核心结构 ——的角度,来通俗解释延时消息的整个生命周期,会让你更深入理解它是怎么“绕一圈”实现的。
2025-06-18 17:23:27
1049
原创 RocketMQ深入理解原理,工作流程细节
Producer可以将写入到中的producer发送消息前要知道往哪个topic中投递,进而向nameserver要这个topic的路由信息表一个。
2025-06-10 18:13:35
969
原创 RocketMQ基础命令
本文简要介绍了RocketMQ的基本操作流程,包括启动NameServer和Broker、查看集群状态、生产/消费消息以及关闭服务的命令步骤。同时提供了处理端口占用问题的方法(通过lsof和kill命令),并介绍了RocketMQ可视化面板的安装与配置过程(修改端口为7000后通过mvn打包运行)。最后展示了如何通过浏览器访问localhost:7000查看可视化监控界面。全文以命令行操作为主,涵盖RocketMQ核心组件的全生命周期管理。
2025-06-09 14:15:14
320
原创 RocketMQ基础概念的理解
和之间存在关系。一个生产者可以向多个主题发送消息,一个主题可以接收来自多个生产者的消息。这种多对多关系有助于提高性能扩展和灾难恢复能力。
2025-06-05 22:59:43
325
原创 黑马点评项目03——优惠券秒杀引来的血案(超卖问题,一人一单解决)分布式锁,Lua脚本
为了保证顾客下单订单号唯一性以及不暴露给顾客一些敏感信息(例如:第几个下单的),所以不能采用单纯自增的方式。这里采用redis自增id策略,id为时间戳+计数器。需要说明的是 在redis保存的key+计数器,key是(当天下单时间),id是当前时间戳-设定的起始时间戳+自增count,一起合成id,这是代码。
2025-06-05 19:08:04
1736
原创 mybatis-plus实现增删改查(新手理解版)
脚手架使用的springboot3.3.12 +依赖 myql驱动,手动加入mybatisplus 和 lombok依赖。一个小细节:自己加的第三方库,未在父项目或 dependencyManagement 中定义版本,要加版本号。QueryWrapper 扩展了AbstractWrappe功能,可以指定查找哪些字段。也有增删改查,不过它比userMapper优点支持批量化操作,更加丰富,常规就够用了。调用baseMapper.XXX(Wrapper对象)在serviceImpl类中直接用。
2025-05-28 23:11:34
1097
原创 黑马点评项目01——短信登录以及登录校验的细节
本文介绍了两种短信登录实现方式: Session方式: 通过session存储验证码和用户信息 使用ThreadLocal保存用户信息实现拦截器校验 缺点是不适合分布式环境 Redis方式: 使用Redis存储验证码和用户信息 验证码设置3分钟有效期 使用UUID生成token作为Redis键 通过请求头携带token进行登录校验 两种方式对比了实现细节,Redis方案解决了Session在分布式环境中的共享问题,更适合现代应用架构。文中还解释了RedisTemplate和StringRedisTempla
2025-05-27 21:20:45
1248
原创 Redis-黑马点评项目-08-用Redis的Zset集合实现点赞按时间排行功能(类似于朋友圈)报栈溢出错误
修改版本pom.xml文件parent版本。
2025-05-26 16:05:06
385
原创 Redis-黑马点评项目-07-jmeter测试-200个线程抢购100个秒杀券超卖问题
在高并发场景下,秒杀系统容易出现超卖问题。本文通过Java代码展示了如何利用乐观锁(CAS)解决这一问题。代码中,通过判断库存是否大于0来确保库存扣减的原子性,避免超卖。同时,使用Redis生成全局唯一订单ID,确保订单的唯一性。在测试过程中,通过JMeter模拟高并发场景,发现数据库中的库存已全部售出,但测试结果未达到预期。通过清理缓存和添加响应断言,最终验证了系统的正确性。最终效果图显示,系统在高并发下能够正确处理库存扣减和订单生成,解决了超卖问题。
2025-05-22 16:53:37
313
原创 Redis-黑马点评项目-06-jmeter测试-200个线程抢购秒杀券全部报错401问题
在性能测试中,200个线程报错401,表明请求未授权。问题出在路径/voucher-order/seckill/22需要登录验证,而测试工具JMeter未携带有效的token。解决方法是获取有效的token(HASH码),并在JMeter中添加一个Http信息头管理器,将token以键authorization的形式放入。这样,JMeter在发送请求时会携带授权信息,从而避免401错误。
2025-05-22 14:57:23
247
原创 Redis-黑马点评项目-05-postman测试-新增优惠券报错以及前端展示优惠劵报错NaN问题
在使用Postman向数据库添加优惠券信息时,遇到了JSON解析错误。错误信息显示,beginTime字段的当前令牌(VALUE_STRING)不是数字,无法使用数字值访问器。原因是JacksonConfig.java中配置了从JSON中读取时间戳(毫秒值),而原始请求体中传递的是日期字符串"2022-01-26T10:09:17"。
2025-05-21 21:31:28
644
原创 Redis-黑马点评项目-04-使用逻辑过期来解决缓存击穿问题
在高并发环境下,只查了一次数据库,而且我们故意修改的是,数据库和redis数据不一样,这样过期了,就会有一个线程去修改,也只能由一个修改,谁拿到了锁就修改呗,也就是查数据库,写回到redis,其他线程,在修改之前查询返回的是旧数据,可能会出现短时间数据不一致问题。以防有一个线程完成缓存重建,刚刚释放完lock,另外一个线程拿到lock,再判断一下是否完成有没有这个key,若有,就判断是否到期,没到期就会直接返回,2次返回前都是先执行的finally,保证锁被释放。无法解析符号 ‘zset’
2025-05-20 22:54:08
800
原创 Redis-黑马点评项目-03-使用RedisSETNX模拟锁来解决缓存击穿问题
本文介绍了一种基于Redis的分布式锁方案,结合布隆过滤器解决缓存穿透问题。方案的核心是通过Redis的SETNX命令实现分布式锁,确保在高并发场景下,只有一个线程能够访问数据库,避免缓存击穿。同时,利用布隆过滤器预先判断数据是否存在,防止无效请求穿透缓存直接访问数据库。代码实现中,首先通过布隆过滤器判断请求的ID是否存在,若不存在则直接返回错误。若存在,则尝试从Redis缓存中获取数据,若缓存未命中,则尝试加锁并查询数据库。查询成功后,将结果写入缓存并释放锁。通过该方案,可以有效提升系统的并发处理能力和缓
2025-05-19 23:21:10
160
原创 Redis-黑马点评项目-02-使用布隆过滤器来解决缓存穿透问题
本文介绍了如何通过Redisson实现布隆过滤器来优化查询性能,避免缓存穿透问题。首先,在pom.xml中引入Redisson依赖,然后编写配置类注册RedissonClient对象。接着,实现布隆过滤器类,将所有店铺ID加载到布隆过滤器中。在查询时,通过布隆过滤器拦截无效的店铺ID,避免直接查询数据库。最后,文章提到需要动态更新布隆过滤器以应对店铺ID的增删操作,并展示了拦截效果图。通过这种方式,可以有效提升系统性能并减少不必要的数据库查询。
2025-05-19 20:31:59
570
原创 Redis-黑马点评项目-01-postman测试-时间戳-localDate序列化问题
安装postman后发送请求地址和请求体中,采用 RestFul 风格,修改采用putIDEA报错:原来是Jackson无法将时间戳转换为LocalDateTime 类型数据。
2025-05-19 17:02:54
498
原创 IDEA 中github首次使用细节
因为要用开启了代理模式(魔法)来访问github,所以要修改git提交的端口号,弄了一个脚本文件,使用后开启代理端口号,报错消失,访问完可以恢复。
2025-05-10 22:07:02
226
原创 MyBatis之动态生成类
MyBatis底层使用的就是Javassist,在内存中生成class文件,然后就不用写dao层的实现类了。也把这个放到环境变量中,就不会报错了。
2025-04-22 21:36:04
408
原创 MyBatis事务管理与jdbc事务管理代码对照关系
具体对照关系,写在了代码里面,MyBatis采用JDBC事务管理方式时,实际上底层封装JDBC事务管理机制。
2025-04-17 12:37:58
179
原创 包装类中的字符串转换API对比
Double.parseDouble() 转的是普通double 类型。Double.valueOf() 转的是包装类。:都是字符串转数字类型。
2025-04-16 22:48:41
93
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人