- 博客(57)
- 收藏
- 关注
原创 安装docker compose与elasticsearch,kibana
修改目录权限可执行,不然后续 docker-compose up 命令会报错。ps:如果网络太慢可直接在博客中下载附属文件。ip地址加yml文件定义端口。
2024-07-01 16:38:34
526
原创 JWT整合Gateway实现鉴权(RSA与公私密钥工具类)
Component@Slf4j@Autowired@Autowired//核心过滤器方法@Override//设置白名单,白名单里面的请求路径,直接放行//判断path是否以allowPath开头//放行//1.获取请求中的tokenif (cookie!=null){try {//2.解析token//3.放行=null){//如果出现异常,设置异常状态//过滤器执行顺序@Override。
2024-06-19 22:27:57
1342
原创 seata测试demo(订单 @GlobalTransactional)
==>标准全局@GlobalTransactional启动入口动作的微服务模块(比如订单模块),它是事务的发起者,负责定义全局事务的范围,并根据TC维护的全局事务状态,做出开启事务,提交事务,回滚事务的决议。===>就是mysql数据库本身,可以是多个RM,负责管理分支事务上的资源,向TC注册分支事务,汇报分支事务状态,驱动分支事务的提交或回滚。===>就是seata 负责维护全局事务和分支事务的状态,驱动全局事务提交和回滚。RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;
2024-03-24 23:20:11
632
原创 Sentinel持久化(nacos)
controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;strategy:流控模式,0表示直接,1表示关联,2表示链路;grade:阈值类型,0表示线程数,1表示QPS;clusterMode:是否集群。limitApp:来源应用;count:单机阈值;
2024-03-20 18:07:01
453
原创 Sentinel(熔断规则)
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断。又因为服务器响应时长设置:暂停1秒,所以响应一个请求的时长都大于1秒综上符合熔断条件,所以当线程开启1秒后,进入熔断状态。3结束熔断(保险丝闭合恢复,可以访问):在探测恢复状态,如果接下来的一个请求响应时间小于设置的慢调用 RT,则结束熔断,否则继续熔断。1熔断状态(保险丝跳闸断电,不可访问):在接下来的熔断时长内请求会自动被熔断。
2024-03-19 22:36:47
786
原创 Sentinel(流控模式:直接关联链路,流控效果:直接预热排队)
Sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到指定的阈值时,就会被流量进行控制,以避免服务被瞬时的高并发流量击垮,保证服务的高可靠性。
2024-03-19 16:43:49
1034
原创 spring整合Sentinel
注:sentinel的默认端口为8080,容易出现tomcat的冲突。当端口冲突,可以使用该指令修改sentinel的端口。默认账号和密码都为sentinel。
2024-03-13 23:03:46
913
原创 Nacos(服务注册与服务配置)
官网下载Nacos安装包并解压,直接运行bin目录下的startup.cmd -m standalone(standalone:单机模式,非集群)。通过Nacos和spring-cloud-starter-alibaba-nacos-config实现中心化全局配置的动态变更。访问地址:http://localhost:8848/nacos 账号密码默认为nacos。配置restTemplate。
2024-03-13 14:37:31
821
原创 Gateway(路由映射)
Fileter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由.在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。
2024-03-11 23:30:26
1438
原创 CircuitBreaker断路器(服务熔断,服务降级)
比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的。,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。闭合状态恢复正常处理请求。
2024-03-11 16:17:49
1604
原创 OpenFeign相关配置(超时,重试,HttpClient5,日志)
Bean//Feign默认配置是不走重试策略的//最大请求次数为3(1+2),初始间隔时间为100ms,重试间最大间隔时间为1s。
2024-03-10 22:31:33
1881
原创 OpenFeign的常规使用
consumer中的orderController会自动装配PayFeignApi接口,并调用接口中提供的方法。该接口会通过@FeignClient(value = "cloud-payment-service")中的value名取注册中心寻找对应的微服务模块,并匹配该模块方法的路径并调用。将cloud-consumer-feign-order模块启动类添加注释,用于开启@FeignClient(value = "cloud-payment-service")注解。
2024-03-10 21:24:17
368
原创 LoadBalancer (本地负载均衡)
1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。
2024-03-09 16:46:14
862
1
原创 Consul(安装,服务注册与发现,服务配置与动态刷新,配置持久化)
Bootstrap context`和`Application Context`有着不同的约定,所以新增了一个`bootstrap.yml`文件,保证`Bootstrap Context`和`Application Context`配置的分离。Spring Cloud会创建一个“Bootstrap Context”,作为Spring应用的`Application Context`的。因为bootstrap.yml是比application.yml先加载的。bootstrap.yml是系统级的,
2024-03-09 14:24:15
2373
7
原创 RabbitMQ(任务模型,交换机(广播,订阅,通配符订阅))
Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列Direct交换机与Fanout交换机的差异Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列。
2024-03-06 10:46:20
2383
原创 RabbitMQ(SpringAMQP)
Spring的官方基于RabbitMQ提供了一套消息收发的模板工具:SpringAMQP。并且基于SpringBoot对其实现了自动装配。封装了RabbitTemplate工具,用于发送消息。test.queue队列中此时具有消息。基于注解的监听器模式,异步接收消息。自动声明队列、交换机及其绑定关系。
2024-03-06 02:45:00
383
原创 RabbitMQ(控制台模拟收发消息与数据隔离)
虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue。2.由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。生产者投递的消息会暂存在消息队列中,等待消费者处理。:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。这里的用户都是RabbitMQ的管理或运维人员。1.进去任意一个交换机,模拟生产者发送消息。:生产者,也就是发送消息的一方。:消费者,也就是消费消息的一方。2.切换用户为新建的用户。队列,就会消费该消息。
2024-03-05 21:19:34
637
原创 Redis集群(哨兵集群)
Sentinel会不断监控master和slave是否按预期工作.:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也会以新的master为主。:Sentinel充当redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送到Redis的客户端。
2024-03-05 14:57:44
477
原创 Redis集群(主从)
slave完成同步时也会记录当前同步的offset,如果slave的offset小于master的offset,说明slave数据落后master,需要更新。:简称replid,是数据集的标记,id一致表示是同一数据集,每一个master都有唯一的replid,slave会继承master节点的replid。因此slave做数据同步,必须向master声明自己的replication id和offset,master才可以判断到底需要同步那些数据。连接7002与7003端口,并与7001做连接。
2024-03-04 22:59:25
1042
原创 Redis持久化(RDB,AOF)
因为是记录命令,AOF文件会比RDB文件大的多。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。当主进程执行写操作时,则会拷贝一份数据,执行写操作。
2024-03-04 11:10:55
461
原创 分布式锁-Redisson
是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?:使用这把锁咱们就不使用主从了,每个节点的地位都是一样的, 这把锁加锁的逻辑需要写入到每一个主丛节点上,只有所有的服务器都写入成功,此时才是加锁成功,假设现在某个节点挂了,那么他去获得锁的时候,只要有一个节点拿不到,都不能算是加锁成功,就保证了加锁的可靠性。
2024-03-03 21:39:31
1004
原创 redis分布式锁
每个线程释放锁的时候,去判断一下当前这把锁是否属于自己,如不属于自己,则不进行锁的删除,假设还是上边的情况,线程1卡顿,锁自动释放,线程2进入到锁的内部执行逻辑,此时线程1反应过来,然后删除锁,但是线程1,一看当前这把锁不是属于自己,于是不进行删除锁逻辑,当线程2走到删除锁逻辑时,如果没有卡过自动释放锁的时间点,则判断当前这把锁是属于自己的,于是删除这把锁。如若不是,则不释放锁。:大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路。
2024-03-03 09:14:54
928
原创 多线程超卖问题(悲观锁,乐观锁)
只要我扣减库存时的库存和之前我查询到的库存是一样的,就意味着没有人在中间修改过库存,那么此时就是安全的,但是以上这种方式通过测试发现会有很多失败的情况,失败的原因在于:在使用乐观锁过程中假设100个线程同时都拿到了100的库存,然后大家一起去进行扣减,但是100个人中只有1个人能扣减成功,其他的人在处理时,他们在扣减时,库存已经被修改过了,所以此时其他线程都会失败.: 悲观锁可以实现对于数据的串行化执行,比如syn,和lock都是悲观锁的代表,同时,悲观锁中又可以再细分为公平锁,非公平锁,可重入锁,等等。
2024-03-02 13:53:42
1662
原创 Redis实现全局唯一id(时间戳+序列号实现)
是通过时间戳获取的,而在同一秒内,多个线程生成的时间戳是相同的。这就保证了多个线程生成的 ID 在高位的时间戳部分是相同的,而在低位的序列号部分是不同的。实例的原子自增操作,以及时间戳和序列号的组合,保证了在多线程并发调用时,每一个返回的 ID 都是不同的。序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID。方法,Redis 会保证最终结果的一致性,每个线程得到的。操作是原子的,保证了同一时刻只有一个线程能够自增。对于多线程并发调用的情况,多个线程同时执行。随着我们规模越来越大。
2024-03-02 03:30:00
739
原创 redis 缓存击穿问题(互斥锁,逻辑过期)
由于保证了互斥性,所以数据一致,且实现简单,因为仅仅只需要加一把锁而已,也没其他的事情需要操心,所以没有额外的内存消耗,缺点在于有锁就有死锁问题的发生,且只能串行执行性能肯定受到影响线程读取过程中不需要等待,性能好,有一个额外的线程持有锁去进行重构数据,但是在重构数据完成前,其他的线程只能返回之前的数据,且实现起来麻烦。
2024-03-01 21:48:00
1778
1
原创 redis缓存数据(异步操作,缓存穿透,缓存雪崩)
利用redis缓存数据可以减少减少用户访问并发量带来的服务器读写压力,提高读写效率,降低响应时间。
2024-03-01 01:24:34
497
原创 Redis代替session实现登录业务
第一层拦截器:拦截所有请求,用于判断且存入用户信息。第二层拦截器:用于拦截需要具有用户信息的请求.拦截器注册1.用户登录时,通过生成的token为key存入redis中,并将token返回给前端。2.第一层拦截器:验证前端的请求头是否有token,如果有,通过token拿到redis中的用户信息,并存入ThreadLocal中。3.第二层拦截器:验证ThreadLocal中是否具有用户信息,来验证是否用户登录。
2024-03-01 01:03:58
569
原创 springBoot2 请求映射原理
processRequest的核心调用方法doService为定义的一个抽象方法 该方法在dispatcherServlet中实现,doService中核心方法为。RequestMappingHandlerMapping:保存了所有@RequestMapping和handler的映射规则。每一个请求都会调用该方法 dispatcherServlet===>doDispatch()请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。如果有就找到这个请求对应的handler。
2024-02-27 15:12:08
318
原创 springboot2-静态资源原理
获取和spring.resources绑定的所有的值的对象。ResourceProperties类与application中前缀为spring.resources的配置数据绑定。WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象。WebMvcProperties类与application中前缀为spring.mvc的配置数据绑定。
2024-02-27 10:41:55
433
原创 springboot2 @EnableAutoConfiguration 自动配置
从spring-boot-autoconfigure的META-INF/spring.factories得到的组件并不是都全部配置,而是会通过@ConditionalOnClass等注解的条件装配 如:未导入该类的包等 便不会自动装配。xxxxAutoConfiguration--->组件---->xxxProperties取值----->application.properties。核心为:spring-boot-autoconfigure。将指定的一个包下的所有组件导入进来(main程序的包路径)
2024-02-25 23:31:12
359
1
原创 Controller ServiceI Mapper(Dao)
1.Controller(接收前端数据,做一个数据的简单处理),调用Service层中的所需方法,并将该方法所需的数据传入。2.Service(接收Controller传入的数据,进行业务逻辑处理),调用Mapper层所需方法,并将该方法所需的数据传入。3.Mapper层(接收Service传入的数据,对sql语句进行填充),将拼接的完整sql语句在数据库执行,并将得到的数据返回给Service层。4.Service层接受Mapper返回的数据,将数据返回给Controller层。
2023-10-30 23:32:13
198
1
原创 spring中依赖自动装配
IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中对的过程称为自动装配。自动装配的方式:按类型(常用),按名称,按构造方法(不常用),不启用自动装配。
2023-08-17 21:55:17
66
1
原创 DI(依赖注入)的两种方式
依赖注入描述了容器中建立bean与bean之间依赖的关系的过程,但是bean运行除了引用类型,还有可能是简单类型(基本数据类型与String)。强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现.此处name属性对应的是构造方法中的传参变量名,而不是定义的应用类型名.在bean中定义引用类型属性并提供可访问的set方法。在bean中定义简单类型属性并提供可访问的set方法。在bean中定义引用类型属性并实现对应的构造方法。依赖注入方式:setter注入和构造器注入。
2023-08-16 22:19:53
124
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人