- 博客(183)
- 收藏
- 关注
原创 SpringCloud&Nacos注册中心服务分级存储模型
一个服务可以有多个实例,例如我们的127.0.0.1:8081,在上海机房127.0.0.1:8082,在杭州机房127.0.0.1:8083,在杭州机房Nacos 就将同一机房内的实例 划分为一个集群。也就是说,是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。
2024-07-28 08:36:26
1269
5
原创 SpringCloud&Nacos注册中心入门
是阿里巴巴的产品,现在是中的一个组件。相比功能更加丰富,在国内受欢迎程度较高。Nacos 虽然是 SpringCloudAlibaba 的组件,而 SpringCloudAlibab a也遵循 SpringCloud 中定义的服务注册、服务发现规范。因此使用 Nacos 和使用 Eureka 对于微服务来说,并没有太大区别。
2024-07-28 08:33:19
677
原创 SpringCloud&认识微服务
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件微服务架构是一种通过将应用程序拆分为小型自治服务来构建软件系统的方法,每个服务都有自己的独立职责,可以单独部署、扩展和更新。
2024-07-27 15:45:49
1248
2
原创 Nacos 配置中心(2023旧笔记)
本地准备两个配置文件,因为 Nacos 在项目初始化时,要保障优先从配置中心进行基础配置拉取,拉取配置后,才能保证项目的正常启动。在 SpringBoot 项目配置文件的加载顺序是存在优先级的, bootstarp 有限级高于 application.group 分组把不同的微服务划分到同一个组。完成上面的配置后 启动项目 访问。dataId 最小的配置划分。服务最终配置文件的确认是由。命名空间之间是隔离的。
2024-07-27 15:41:11
370
原创 Nacos 注册中心(2023旧笔记)
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心。Nacos 就是 注册中心 + 配置中心 的组合 (Eureka + Config + Bus)home服务注册与发现框架CAP模型控制台管理社区活跃度EuerkaAP支持低ZKCP不支持中ConsulAP支持高NacosAP/CP支持高CAP原则又称CAP定理,指的是在一个分布式系统中,一致性可用性分区容错性CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
2024-07-26 17:32:53
362
2
原创 Spring事务
保证业务操作完整性的⼀种数据库机制 事务的4特点: A C I DA 原⼦性C ⼀致性I 隔离性D 持久性属性:描述物体特征的⼀系列值 性别 身⾼ 体重 …事务属性:描述事务特征的⼀系列值隔离属性传播属性只读属性超时属性异常属性。
2024-07-26 13:00:00
339
原创 Spring 基于注解的AOP编程
本文详细介绍了SpringAOP中的各种通知类型(前置、后置、最终、异常和环绕通知),以及如何使用切入点表达式进行方法增强。还讨论了如何在多类增强同一个方法时设置优先级,以及避免在业务方法调用中的潜在问题。
2024-07-26 08:47:42
541
原创 Spring AOP
本文介绍了AOP(面向切面编程)的概念、底层原理,包括JDK和CGLIB动态代理,以及AOP的关键术语如连接点、切入点和通知。此外,文章详细展示了如何在Spring中基于注解实现AOP操作,包括前置、后置、环绕等通知类型,并演示了如何提取共用的切入点和设置增强类的优先级。
2024-07-26 08:44:30
872
原创 Spring的生命周期
Spring 对象的生命周期是指从对象创建到销毁的整个过程,包含了对象的实例化、初始化、使用和销毁等阶段。实例化:当Spring容器接收到创建对象的请求时,它会创建一个对象的实例。属性设置:对象实例化后,Spring 容器会根据配置文件或注解将相关属性设置到对象中。初始化:对象的所有依赖关系都被设置后,Spring容器会调用对象的初始化方法,如定义的init-method。使用:对象初始化完成后,可以被使用于业务逻辑中。销毁。
2024-07-25 15:48:38
644
1
原创 SpringBoot基于RabbitMQ实现消息可靠性
本文详细阐述了RabbitMQ中的消息确认机制、生产者确认配置、publisher-return和ConfirmCallback的实战应用,以及消息持久化策略,包括交换机、队列和消息的持久化。同时介绍了消费者确认模式和失败重试机制,以及如何处理消费者异常和死信消息的优雅方案。
2024-07-25 08:48:20
1370
6
原创 SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
本文介绍了如何在SpringBoot项目中使用RabbitMQ的TopicExchange实现动态路由消息,通过通配符规则将消息发送到不同队列,如business.test.topic.queue1和queue2,并展示了生产者和消费者的具体实现。Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定的时候使用通配符!
2024-07-25 08:43:35
588
1
原创 SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)
上一篇文章中的Fanout模式,。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct定向类型的交换机。
2024-07-25 07:15:00
862
原创 RabbitMQ中的交换机
本文详细介绍了RabbitMQ中的三种主要交换机类型(直接、扇形和主题),以及它们在路由控制、消息过滤、广播和解耦等方面的作用。生产者通过路由键和绑定键控制消息流向,实现了消息的精确路由和解耦设计。
2024-07-24 16:55:17
903
2
原创 SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue)
上一篇文章SpringBoot实现RabbitMQ的简单队列, 实现了用SpringBoot实现RabbitMQ的简单队列, 篇文章 操作 用SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue),也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。
2024-07-24 16:37:05
752
原创 SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
2024-07-24 15:55:09
506
原创 SpringSecurity 快速入门
在互联网中,我们每天都会使用到各种各样的APP和网站,在使用过程中通常还会遇到需要注册登录的情况,输入你的用户名和密码才能正常使用,也就是说成为这个应用的合法身份才可以访问应用的资源,这个过程就是认证。认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。当然认证的方式有很多,常见的账号密码登录,手机验证码登录,指纹登录,刷脸登录等等。简单说: 认证就是让系统知道我们是谁。如何实现授权?
2024-07-24 10:52:19
864
原创 JWT介绍及入门
本文详细介绍了JWT(JSONWebToken)的概念、组成部分(头部、载荷和签证)、生成和验证过程,以及在分布式应用中的单点登录应用场景。重点讲解了如何使用HS256算法进行签名和校验,以及常见错误处理。
2024-07-24 10:18:55
762
原创 Spring⼯⼚创建复杂对象
复杂对象:指的就是不能直接通过 new 构造⽅法创建的对象Connectionsigleton: 只会创建⼀次简单对象 默认值prototype: 每⼀次都会创建新的对象。
2024-07-24 08:50:34
830
原创 Spring 控制反转与依赖注入
本文介绍了控制反转(IoC)和依赖注入(DI)在Spring框架中的作用,通过实例阐述了它们如何帮助实现对象的解耦、提高灵活性和可维护性,以及如何在代码中应用这些设计原则。
2024-07-24 08:47:55
633
原创 Spring注入
注入(Injection)是指通过依赖注入(DI)方式,由容器动态地将某些对象的依赖关系注入到这些对象中。在Spring框架中,最常见的是通过构造函数setter 方法或字段来进行依赖注入。上面的文字太官方了,说的接地气点:注入就是通过Spring⼯⼚及配置⽂件,为所创建对象的成员变量赋值.为成员变量提供set get⽅法配置⽂件中进⾏注⼊(赋值:将 userDAO 赋值给 UserServiceImpl)
2024-07-23 14:41:04
975
原创 Spring工厂API与原理
本文详细介绍了Spring框架中的ApplicationContext核心API,包括其作用、使用方法、不同环境下的应用以及配置文件中的注意事项。此外,还涉及Spring工厂的底层实现原理和开发过程中的对象创建策略。
2024-07-23 14:27:39
425
原创 Spring及工厂模式概述
Spring是⼀个轻量级的JavaEE解决⽅案,整合众多优秀的设计模式轻量级对于运行环境是没有额外要求的代码移植性高 不需要实现额外接口整合设计模式工厂设计模式代理设计模式模板设计模式策略设计模式⼴义概念 ⾯向对象设计中,解决特定问题的经典代码狭义概念 GOF4⼈帮定义的23种设计模式:⼯⼚、适配器、装饰器、⻔⾯、代理、模板…概念:通过⼯⼚类,创建对象// 反例好处:解耦合耦合:指定是代码间的强关联关系,⼀⽅的改变会影响到另⼀⽅问题:不利于代码维护。
2024-07-23 14:24:39
549
原创 注解配置SpringMVC
当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。接口的类,如果找到的话就用它来配置Servlet容器。每一项技术深挖都是一个庞大的体系,学海无涯,共勉。Spring提供了这个接口的实现,名为。本篇文章讲解使用配置类和注解代替。的类并将配置的任务交给它们来完成。环境中,容器会在类路径中查找实现。,这个类反过来又会查找实现。
2024-07-23 09:20:09
600
1
原创 RabbitMQ-同步和异步区别&快速入门
Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!在Direct模型下,队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key).消息的发送方在向Exchange发送消息时,也必须指定消息的routing key。订阅者从Broker订阅事件,不关心谁发来的消息。4.X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列。
2024-07-23 08:49:12
790
原创 消息队列 MQ
MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。
2024-07-23 08:44:16
898
原创 Redis到底是多线程还是单线程
当我们的客户端想要去连接我们服务器,会去先到IO多路复用模型去进行排队,会有一个连接应答处理器,他会去接受读请求,然后又把读请求注册到具体模型中去,此时这些建立起来的连接,如果是客户端请求处理器去进行执行命令时,他会去把数据读取出来,然后把数据放入到client中, clinet去解析当前的命令转化为redis认识的命令,接下来就开始处理这些命令,从redis中的command中找到这些命令,然后就真正的去操作对应的数据了,当数据操作完成后,会去找到命令回复处理器,再由他将数据写出。
2024-07-23 08:42:13
714
原创 Eureka理论与入门
Eureka 是 Netflix 提供的基于 REST 的服务发现组件,用于帮助开发者管理微服务架构中的服务实例。它提供了一个可伸缩的注册中心,可以让每个微服务都能够找到其他微服务的位置和元数据信息,并对其进行负载均衡、自动故障转移等操作。通过将 Eureka Server 部署在中心服务器上,然后将各个微服务节点(即Eureka Client)注册到该中心服务器上,便可以实现微服务间的快速查找和调用。使用Eureka能够方便地扩展和部署大规模微服务应用程序,并让你更容易地维护和监控整个系统。
2024-07-22 16:12:00
710
原创 Redis内存淘汰(内存过期)策略
Redis中数据过期策略采用定期删除惰性删除策略结合起来,以及采用淘汰策略来兜底。:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。:在获取 key 时,先判断 key 是否过期,如果过期则删除。
2024-07-22 14:10:09
1470
5
原创 Redis多路复用详解
之前了解到阻塞IO和非阻塞IO, 无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案:如果调用recvfrom时,恰好没有数据,阻塞IO会使CPU阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用。如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并处理数据所以怎么看起来以上两种方式性能都不好。
2024-07-22 08:39:34
1015
1
原创 Redis5种网络模型详解
阻塞IO(Blocking IO)非阻塞IO(Nonblocking IO)IO多路复用(IO Multiplexing)信号驱动IO(Signal Driven IO)异步IO(Asynchronous IO)能监听的FD最大不超过1024每次select都需要把所有要监听的FD都拷贝到内核空间每次都要遍历所有FD来判断就绪状态poll利用链表解决了select中监听FD上限的问题,但依然要遍历所有FD,如果监听较多,性能会下降epoll 模式中如何解决这些问题的?
2024-07-22 08:34:54
749
原创 drop、delete 与 truncate 区别
`drop`、`delete` 与 `truncate` 都是 MySQL 语句中与删除有关的语法, 但是他们的具体含义和用法还是有区别的.
2024-07-21 20:20:18
744
1
原创 Redis 网络模型-用户空间和内核态空间
我们的应用程序也好,还是内核空间也好,都是没有办法直接去物理内存的,而是通过分配一些虚拟内存映射到物理内存中,我们的内核和应用程序去访问虚拟内存的时候,就需要一个虚拟地址,这个地址是一个无符号的整数,比如一个32位的操作系统,他的带宽就是32,他的虚拟地址就是2的32次方,也就是说他寻址的范围就是0~2的32次方, 这片寻址空间对应的就是2的32个字节,就是4GB,这个4GB,会有3个GB分给用户空间,会有1GB给内核系统。写数据时,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备。
2024-07-21 09:03:22
338
2
原创 一文了解MySQL的索引语法及其使用
当字段类型为字符串(varchar, text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率,此时可以只降字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。前缀长度:可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。联合索引中,出现范围查询(),范围查询右侧的列索引失效。
2024-07-21 08:59:11
620
原创 一文了解MySQL的子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入, 本篇文章介绍MySQL中的子查询的用法.
2024-07-20 18:27:00
1348
6
原创 一文了解MySQL explain详解
MySQL 的 EXPLAIN 是一个用于查询优化的关键字。它用于分析和评估查询语句的执行计划,帮助开发者理解查询语句的性能问题以及优化查询的方式。使用EXPLAIN关键字,可以获取关于查询执行计划的详细信息,包括表的访问顺序、连接方式、索引使用情况等,这些信息能够帮助你确定查询是否有效利用了索引,以及是否存在潜在的性能瓶颈。要使用EXPLAIN执行以上语句后,MySQL会返回一个结果集,包含了查询执行计划的详细信息。
2024-07-20 06:30:00
964
1
原创 一文了解MySQL的性能分析
表示 SELECT 的类型,常见取值有 SIMPLE(简单表,即不适用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等。select 查询的序列号,表示查询中执行 select 子句或者操作表的顺序(id相同,执行顺序从上到下;id不同,值越大越先执行)慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。
2024-07-19 15:26:11
963
2
原创 一文了解MySQL的行级锁
本文详细介绍了MySQLInnoDB中的行级锁机制,包括共享锁和排他锁的使用,以及行锁、间隙锁和临键锁的区别和应用场景。重点讨论了不同隔离级别下锁的行为,以及如何通过索引优化锁的性能和避免升级为全表锁。
2024-07-19 08:48:30
1571
原创 RabbitMQ安装及介绍
Channel 是在 connection 内部建立的逻辑连接,如果应用程 序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客 户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑。
2024-07-18 21:45:00
913
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人