自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 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 1273

原创 seata测试demo(订单 @GlobalTransactional)

==>标准全局@GlobalTransactional启动入口动作的微服务模块(比如订单模块),它是事务的发起者,负责定义全局事务的范围,并根据TC维护的全局事务状态,做出开启事务,提交事务,回滚事务的决议。===>就是mysql数据库本身,可以是多个RM,负责管理分支事务上的资源,向TC注册分支事务,汇报分支事务状态,驱动分支事务的提交或回滚。===>就是seata 负责维护全局事务和分支事务的状态,驱动全局事务提交和回滚。RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;

2024-03-24 23:20:11 580

原创 seata安装

nacos bin目录下:startup.cmd -m standalone。

2024-03-21 19:36:54 352

原创 sentinel整合gateway实现服务限流

gateway调用报错503。

2024-03-21 09:48:20 618

原创 sentinel整合openFeign实现fall服务降级

【代码】sentinel整合openFeign实现fall服务降级。

2024-03-20 20:21:27 738

原创 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 414

原创 Sentinel(熔断规则)

经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断。又因为服务器响应时长设置:暂停1秒,所以响应一个请求的时长都大于1秒综上符合熔断条件,所以当线程开启1秒后,进入熔断状态。3结束熔断(保险丝闭合恢复,可以访问):在探测恢复状态,如果接下来的一个请求响应时间小于设置的慢调用 RT,则结束熔断,否则继续熔断。1熔断状态(保险丝跳闸断电,不可访问):在接下来的熔断时长内请求会自动被熔断。

2024-03-19 22:36:47 725

原创 Sentinel(流控模式:直接关联链路,流控效果:直接预热排队)

Sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到指定的阈值时,就会被流量进行控制,以避免服务被瞬时的高并发流量击垮,保证服务的高可靠性。

2024-03-19 16:43:49 994

原创 spring整合Sentinel

注:sentinel的默认端口为8080,容易出现tomcat的冲突。当端口冲突,可以使用该指令修改sentinel的端口。默认账号和密码都为sentinel。

2024-03-13 23:03:46 902

原创 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 555

原创 Gateway(路由映射)

Fileter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由.在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

2024-03-11 23:30:26 1376

原创 CircuitBreaker断路器(服务熔断,服务降级)

比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的。,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。闭合状态恢复正常处理请求。

2024-03-11 16:17:49 1515

原创 OpenFeign相关配置(超时,重试,HttpClient5,日志)

Bean//Feign默认配置是不走重试策略的//最大请求次数为3(1+2),初始间隔时间为100ms,重试间最大间隔时间为1s。

2024-03-10 22:31:33 1303

原创 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 355

原创 LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

2024-03-09 16:46:14 812 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 1861 7

原创 Mapper4生成dao层

【代码】Mapper4生成dao层。

2024-03-08 16:14:45 458

原创 SpringAMQP创建交换机和队列

SpringAMQP提供的Exchange接口。

2024-03-08 01:06:54 649

原创 RabbitMQ(任务模型,交换机(广播,订阅,通配符订阅))

Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列Direct交换机与Fanout交换机的差异Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列。

2024-03-06 10:46:20 2230

原创 RabbitMQ(SpringAMQP)

Spring的官方基于RabbitMQ提供了一套消息收发的模板工具:SpringAMQP。并且基于SpringBoot对其实现了自动装配。封装了RabbitTemplate工具,用于发送消息。test.queue队列中此时具有消息。基于注解的监听器模式,异步接收消息。自动声明队列、交换机及其绑定关系。

2024-03-06 02:45:00 373

原创 RabbitMQ(控制台模拟收发消息与数据隔离)

虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue。2.由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。生产者投递的消息会暂存在消息队列中,等待消费者处理。:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。这里的用户都是RabbitMQ的管理或运维人员。1.进去任意一个交换机,模拟生产者发送消息。:生产者,也就是发送消息的一方。:消费者,也就是消费消息的一方。2.切换用户为新建的用户。队列,就会消费该消息。

2024-03-05 21:19:34 592

原创 Redis集群(哨兵集群)

Sentinel会不断监控master和slave是否按预期工作.:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也会以新的master为主。:Sentinel充当redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送到Redis的客户端。

2024-03-05 14:57:44 470

原创 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 1032

原创 Redis持久化(RDB,AOF)

因为是记录命令,AOF文件会比RDB文件大的多。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。当主进程执行写操作时,则会拷贝一份数据,执行写操作。

2024-03-04 11:10:55 444

原创 分布式锁-Redisson

是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?:使用这把锁咱们就不使用主从了,每个节点的地位都是一样的, 这把锁加锁的逻辑需要写入到每一个主丛节点上,只有所有的服务器都写入成功,此时才是加锁成功,假设现在某个节点挂了,那么他去获得锁的时候,只要有一个节点拿不到,都不能算是加锁成功,就保证了加锁的可靠性。

2024-03-03 21:39:31 982

原创 redis分布式锁

每个线程释放锁的时候,去判断一下当前这把锁是否属于自己,如不属于自己,则不进行锁的删除,假设还是上边的情况,线程1卡顿,锁自动释放,线程2进入到锁的内部执行逻辑,此时线程1反应过来,然后删除锁,但是线程1,一看当前这把锁不是属于自己,于是不进行删除锁逻辑,当线程2走到删除锁逻辑时,如果没有卡过自动释放锁的时间点,则判断当前这把锁是属于自己的,于是删除这把锁。如若不是,则不释放锁。:大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路。

2024-03-03 09:14:54 917

原创 多线程超卖问题(悲观锁,乐观锁)

只要我扣减库存时的库存和之前我查询到的库存是一样的,就意味着没有人在中间修改过库存,那么此时就是安全的,但是以上这种方式通过测试发现会有很多失败的情况,失败的原因在于:在使用乐观锁过程中假设100个线程同时都拿到了100的库存,然后大家一起去进行扣减,但是100个人中只有1个人能扣减成功,其他的人在处理时,他们在扣减时,库存已经被修改过了,所以此时其他线程都会失败.: 悲观锁可以实现对于数据的串行化执行,比如syn,和lock都是悲观锁的代表,同时,悲观锁中又可以再细分为公平锁,非公平锁,可重入锁,等等。

2024-03-02 13:53:42 1520

原创 Redis实现全局唯一id(时间戳+序列号实现)

是通过时间戳获取的,而在同一秒内,多个线程生成的时间戳是相同的。这就保证了多个线程生成的 ID 在高位的时间戳部分是相同的,而在低位的序列号部分是不同的。实例的原子自增操作,以及时间戳和序列号的组合,保证了在多线程并发调用时,每一个返回的 ID 都是不同的。序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID。方法,Redis 会保证最终结果的一致性,每个线程得到的。操作是原子的,保证了同一时刻只有一个线程能够自增。对于多线程并发调用的情况,多个线程同时执行。随着我们规模越来越大。

2024-03-02 03:30:00 597

原创 redis 缓存击穿问题(互斥锁,逻辑过期)

由于保证了互斥性,所以数据一致,且实现简单,因为仅仅只需要加一把锁而已,也没其他的事情需要操心,所以没有额外的内存消耗,缺点在于有锁就有死锁问题的发生,且只能串行执行性能肯定受到影响线程读取过程中不需要等待,性能好,有一个额外的线程持有锁去进行重构数据,但是在重构数据完成前,其他的线程只能返回之前的数据,且实现起来麻烦。

2024-03-01 21:48:00 1752 1

原创 redis缓存数据(异步操作,缓存穿透,缓存雪崩)

利用redis缓存数据可以减少减少用户访问并发量带来的服务器读写压力,提高读写效率,降低响应时间。

2024-03-01 01:24:34 474

原创 Redis代替session实现登录业务

第一层拦截器:拦截所有请求,用于判断且存入用户信息。第二层拦截器:用于拦截需要具有用户信息的请求.拦截器注册1.用户登录时,通过生成的token为key存入redis中,并将token返回给前端。2.第一层拦截器:验证前端的请求头是否有token,如果有,通过token拿到redis中的用户信息,并存入ThreadLocal中。3.第二层拦截器:验证ThreadLocal中是否具有用户信息,来验证是否用户登录。

2024-03-01 01:03:58 528

原创 springBoot2 请求映射原理

processRequest的核心调用方法doService为定义的一个抽象方法 该方法在dispatcherServlet中实现,doService中核心方法为。RequestMappingHandlerMapping:保存了所有@RequestMapping和handler的映射规则。每一个请求都会调用该方法 dispatcherServlet===>doDispatch()请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。如果有就找到这个请求对应的handler。

2024-02-27 15:12:08 310

原创 springboot2-静态资源原理

获取和spring.resources绑定的所有的值的对象。ResourceProperties类与application中前缀为spring.resources的配置数据绑定。WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象。WebMvcProperties类与application中前缀为spring.mvc的配置数据绑定。

2024-02-27 10:41:55 425

原创 springboot2 @EnableAutoConfiguration 自动配置

从spring-boot-autoconfigure的META-INF/spring.factories得到的组件并不是都全部配置,而是会通过@ConditionalOnClass等注解的条件装配 如:未导入该类的包等 便不会自动装配。xxxxAutoConfiguration--->组件---->xxxProperties取值----->application.properties。核心为:spring-boot-autoconfigure。将指定的一个包下的所有组件导入进来(main程序的包路径)

2024-02-25 23:31:12 344 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 181 1

原创 spring中依赖自动装配

IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中对的过程称为自动装配。自动装配的方式:按类型(常用),按名称,按构造方法(不常用),不启用自动装配。

2023-08-17 21:55:17 55 1

原创 DI(依赖注入)的两种方式

依赖注入描述了容器中建立bean与bean之间依赖的关系的过程,但是bean运行除了引用类型,还有可能是简单类型(基本数据类型与String)。强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现.此处name属性对应的是构造方法中的传参变量名,而不是定义的应用类型名.在bean中定义引用类型属性并提供可访问的set方法。在bean中定义简单类型属性并提供可访问的set方法。在bean中定义引用类型属性并实现对应的构造方法。依赖注入方式:setter注入和构造器注入。

2023-08-16 22:19:53 98 1

原创 spring中bean的配置(别名,实例化方法)

bean标签中除了IOC容器可以通过Id命名得到对应的实体类,也可以通过name属性的取名创建实体类。此时创建的不是UserDaoFactoryBean的实体类,而是getObject方法返回的实体类。表现层对象,业务层对象,数据层对象,工具对象适合交给容器进行管理(只用创建一次即可)FactoryBean实例化bean(实例工厂初始化对象的改良)(实用方法)spring中bean默认创建的对象是单例对象。1.创建工厂类提供静态方法创建需要创建的对象。首先创建工厂的实体类,在创建所需类的bean。

2023-08-14 23:14:44 687

原创 spring中IOC与DI 的入门案例

最终效果:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。name属性的bookDao对应的是BookServiceImpl中未实例化的bookDao。IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称。ref属性的bookDao对应的是该文件中注入的id名为bookDao的bean。spring提供了一个容器,成为IOC容器,用来充当IOC思想中的外部。在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。

2023-08-14 21:40:42 32

原创 泛型,通配符

extends E:表示可以传递E和E的所有子类类型,?当泛型使用E时,此时可以接收任意的数据类型,如果要限定传入的数据只能是继承关系的数据时,可以使用通配符?当方法中形参类型不确定时,可以使用类名后面定义的泛型<E>.(只有定义过的方法可以使用)泛型可以统一数据类型,但添加到集合里面时,还是作为object处理,取出时会进行强转数据类型。泛型使用场景:当一个类中,某个变量的数据类型不确定时,可以定义带有泛型的类。此处的E可以理解为变量,用于记录数据的类型。当创建该对象设定了类型时,会自动变成该类型。

2023-08-13 22:50:00 30

空空如也

空空如也

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

TA关注的人

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