自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (1)
  • 收藏
  • 关注

原创 RabbitMQ如何保证消息不被重复消费?

RabbitMQ 提供了消息确认机制(ack),只有当消费者成功处理完消息后,才会向 RabbitMQ 发送确认信号,此时 RabbitMQ 才会将该消息从队列中移除。要确保 RabbitMQ 中的消息不被重复消费,最有效的方法是结合幂等性设计、消息去重机制以及正确使用 RabbitMQ 的确认机制。RabbitMQ 支持事务机制,可以在发布消息时使用事务来确保消息的可靠性。如果你的应用场景对消息的重复消费非常敏感,建议重点考虑幂等性和消息去重机制,同时确保 RabbitMQ 的确认机制配置正确。

2025-03-23 12:41:52 394

原创 简述什么是RabbitMQ延迟队列

RabbitMQ 延迟队列(Delayed Queue)并不是 RabbitMQ 的一个内置特性,而是通过插件或特定的实现方式来达到延迟消息的效果。通过该插件,你可以指定消息的延迟时间,然后消息会在延迟时间过后才被路由到目标队列。- 通过配置死信队列和 TTL(Time-To-Live),可以间接实现延迟队列的功能。TTL 是指消息的生存时间,当消息在队列中的时间超过 TTL 后,会被自动转移到死信队列。3. 当消息在普通队列中存活的时间超过了 TTL,消息会自动进入死信队列,从而实现延迟效果。

2025-03-23 12:41:12 140

原创 简述Exchange交换器的类型

(4)headers:不依赖于路由键进行匹配,是根据发送消息内容中的headers属性进行匹配,除此之外 headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了。(1)direct:消息中的路由键(RoutingKey)如果和 Bingding 中的 bindingKey 完全匹配,交换器就将消息发到对应的队列中。是基于完全匹配、单播的模式。(2)fanout:把所有发送到fanout交换器的消息路由到所有绑定该交换器的队列中,fanout 类型转发消息是最快的。

2025-03-23 11:38:34 200

原创 简述RabbitMQ的组织架构

(9)Channel: 信道,AMQP 命令都是在信道中进行的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。(7)Binding:绑定,通过绑定将交换器和队列关联起来,一般会指定一个BindingKey,通过BindingKey,交换器就知道将消息路由给哪个队列了。

2025-03-23 11:32:54 194

原创 Hystrix主要功能

Hystrix实现了开关降级、超时降级、熔断降级1:资源隔离让你的系统里,某一块东西,在故障的情况下,不会耗尽系统所有的资源,比如线程资源。

2025-03-23 11:14:30 592

原创 Feign的工作原理

要使用Feign就必须在启动类上加上注解@EnableFeignCleints,这个注解就相当于Feign组件的一个入口,当使用@EnableFeignCleints后,程序启动后,会进行包扫描,扫描所有被@FeignCleint注解修饰的接口,通过JDK底层的动态代理来为远程接口创建代理实例,并且注册到IOC容器中。最后一步是针对不同的http状态码来做不同的处理,如果http状态码为成功,再判断是否有返回值,如果有返回值就对响应对象进行解码操作,无返回值直接返回null;

2025-03-23 11:01:29 675

原创 简述什么是SpringCloud GateWay

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个API网关,它基于Spring 5.0+、Spring Boot 2.0+ 和 Project Reactor 等技术构建。作为网关,它的主要功能是为微服务架构提供一个入口点,帮助管理和路由来自客户端的请求到不同的后端微服务。它简化了开发人员的工作,使得构建和维护复杂的分布式系统变得更加容易。2. 过滤器:提供了丰富的内置过滤器,可以对进入或离开网关的请求进行处理,例如修改请求头、添加响应头、限流、熔断等操作。

2025-03-23 10:56:01 96

原创 简述Eureka 失效剔除和自我保护机制

超时时间:如果某个服务实例在指定时间内(默认为 90 秒)没有发送心跳,Eureka Server 就会认为该实例不可用,并将其从服务列表中移除。失效剔除机制是指 Eureka Server 定期检查服务实例的健康状态,并移除那些不再发送心跳的服务实例。- 作用:确保服务注册表中的信息始终是最新的,避免客户端调用到已经下线或故障的服务实例。自我保护机制是 Eureka 在极端情况下的容错设计,目的是防止误剔除大量服务实例。- 失效剔除机制:用于清理不可用的服务实例,保持服务注册表的准确性。

2025-03-23 10:39:12 207

原创 SpringCloud如何实现服务的注册和发现

它允许各个微服务实例向注册中心注册自己的信息(如主机地址、端口号等),并能通过注册中心发现其他服务的位置。每个微服务既是服务提供者也是潜在的服务消费者。- 服务提供者:当一个微服务启动时,它会将自身的元数据(例如名称、IP 地址、端口等)发送给 Eureka Server 进行注册。- 服务消费者:需要调用其他服务时,先从 Eureka Server 获取目标服务的信息,然后直接发起请求。- Feign:声明式的Web服务客户端,简化了HTTP API的调用过程,内置支持Ribbon做负载均衡。

2025-03-23 10:31:37 324

原创 SpringCloud中的常用组件

17:Spring Cloud OpenFeign 基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在Spring Cloud 2.0中已经取代Feign成为了一等公民。:6:Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;9:Spring Cloud Bus 用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。

2025-03-23 10:29:46 331

原创 简述SpringCloud 和 Dubbo 有哪些区别

如果你的项目更注重与 Spring 生态系统的集成、RESTful API 和 HTTP 协议的支持,那么 Spring Cloud 可能更适合你;- Dubbo: 默认使用的是基于 TCP 的私有二进制协议(Dubbo 协议),同时也支持 HTTP、Hessian、REST 等多种协议。- Spring Cloud: 更适合企业级应用,尤其是那些需要集成多种微服务组件(如网关、配置中心、监控等)的场景。- Spring Cloud: 由于其广泛的应用和强大的生态支持,拥有丰富的文档、教程和社区资源。

2025-03-23 10:26:13 361

原创 SpringCloud分布式微服务之间如何独立通讯

在Spring Cloud生态系统中,微服务之间的独立通讯是通过一系列组件和技术实现的,这些组件共同工作以确保服务可以可靠、高效地相互通信。综上所述,在Spring Cloud中,微服务之间的独立通讯依靠上述技术和框架的支持,从而实现了服务间的松耦合、高可用性和易于维护的特点。- 使用 @FeignClient 注解,开发者可以方便地定义对外部服务的接口,并且可以通过简单的函数调用来完成远程服务调用。- 开发人员无需硬编码服务URL,而是通过服务名称来进行访问,具体实例的选择由服务发现组件负责。

2025-03-23 10:14:57 127

原创 如何理解Kubernetes的高可用

因此,当你运行调度程序的多个副本时,一个实例被选为领导者,而其他实例被标记为追随者。通过在kubernetes中实施HA,可以降低停机风险,在集群上运行的应用程序和服务保持可用且可供用户访问,并且系统可以在无需人工干预的情况下快速从故障中恢复。即使在控制平面发生故障的情况下,工作器节点上的现有工作负载也会继续为请求提供服务器服务,但是,如果出现节点故障,则不会发生pod调度活动或任何类型的更新活动。概括地说,这可以通过部署控制平面组件的多个副本来实现,这些副本具有跨多个可用性区域或区域的网络拓扑。

2025-03-23 10:08:12 413

原创 简述Spring Boot集成Redis实现缓存和会话管理

在以上示例中,我们定义了一个UserService类,通过@Autowired注入了RedisTemplate实例,并且使用@Cacheable、@CachePut、@CacheEvict注解设置了缓存数据的读取、更新、删除等操作。通过Spring Boot的集成,我们可以轻松的将Redis应用于缓存和会话管理中,提高Web应用的性能和可用性。通过系统中的某些业务场景,我们可以将需要缓存的数据存储在Redis中,并且设置缓存的过期时间,以达到数据的最优体验和性能。三、Redis在缓存和会话管理中的应用。

2025-03-23 10:07:21 844

原创 理解kubetnetes架构

你讲从这篇文章中了解:1.理解kubernetes架构2.理解kubernetes的基本概念3.学习关于kubernetes架构的组件4.探讨这些组件的工作流程。

2025-03-23 10:06:33 667

原创 简述如何构建基于Spring Boot的分布式事务处理

构建基于Spring Boot的分布式事务处理系统需要根据具体的业务需求选择合适的方案,并结合Spring Cloud生态中的工具(如Seata、Stream等)来简化开发。- 原理:Saga是一种长事务模式,将一个大的事务拆分为多个小的事务(即子事务),每个子事务是独立的。- 数据源配置:对于Seata等工具,需要配置全局事务管理器(TM)和事务协调器(TC),并在各个服务中配置相应的数据源代理。- 原理:XA协议是传统的分布式事务标准,通过两阶段提交来确保多个资源管理器(如数据库)之间的事务一致性。

2025-03-22 11:10:24 259

原创 简述Spring Boot的自定义配置和扩展点实现方法

本文介绍了Spring Boot的自定义配置和扩展点实现方法,包括通过@Configuration注解自定义配置类、通过@Value注解获取配置属性、通过自定义属性文件获取配置属性、自定义Starter、自定义条件注解和自定义命令行参数等。在上面的例子中,我们首先通过@Configuration注解定义了一个配置类,然后通过@ConditionalOnClass注解判断MyService是否在类路径中,如果没有则不会进行自动配置。这样我们就可以在myapp.properties文件中定义自己的属性了。

2025-03-22 11:07:25 325

原创 Spring Boot的反应式编程和响应式系统设计的概念

综上所述,Spring Boot的反应式编程和响应式系统设计可以大量减少应用程序的阻塞和提高应用程序的吞吐量。如果您正在处理大量数据和高并发请求的应用程序,那么考虑采用Spring Boot的反应式编程和响应式系统设计是一个明智的选择。例如,在网站和应用程序应对高并发时,响应式系统设计可以将流量和请求处理能力分散到多个异步组件中,以减少阻塞和提高系统的可用性。Spring Boot是一种用于快速构建应用程序的框架,而反应式编程是一种应对高效和高负载数据处理的方法,它可以使应用程序更加具有响应性和鲁棒性。

2025-03-22 11:06:16 313

原创 简述基于Spring Boot的服务治理和限流实现方法

Spring Cloud提供了Eureka组件,可以实现自动化的服务注册与发现功能,开发人员只需要引入Eureka客户端依赖,将服务注册到Eureka服务器中,即可通过服务名称进行发现与调用。在分布式架构中,服务的数量和复杂度都会大幅度增加,为了保证系统的高可用性和高性能,服务治理和限流已成为了必须要解决的问题之一。通过在请求的方法上添加@HystrixCommand注解,并指定fallback回调方法,当服务调用失败或超时时,就会调用fallback方法返回默认值,避免了服务的崩溃。

2025-03-22 11:05:27 209

原创 SpringBoot多数据源拆分的思路

自定义一个继承自AbstractRoutingDataSource的类,并重写determineCurrentLookupKey()方法,根据业务逻辑返回不同的数据源键。在Spring Boot应用中实现多数据源拆分,通常是为了满足复杂业务场景下的需求,比如读写分离、分库分表等。- 可以为每个数据源创建一个独立的配置类,使用@Configuration注解,并通过@Bean方法返回DataSource对象。- 提供工具类或AOP切面来自动设置和清除数据源上下文,确保每个请求都能正确地使用指定的数据源。

2025-03-22 11:03:59 253

原创 Spring Boot中如何解决跨域问题?

allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的HTTP方法。@CrossOrigin(origins = "http://example.com") // 允许来自 example.com 的请求。- Spring Security 中的 CORS 配置 适合在使用 Spring Security 的情况下处理跨域问题。.allowedOrigins("http://example.com") // 允许的源。

2025-03-22 10:59:33 704

原创 简单描述Springboot集成MyBatis

3. 创建Mapper接口:编写MyBatis的Mapper接口,通常放置在特定包下(如com.example.demo.mapper),并使用@Mapper注解标识该接口为MyBatis的Mapper接口。2. 配置数据源和MyBatis:在application.yml或application.properties文件中配置数据源信息以及MyBatis的相关配置,如Mapper接口的位置、实体类别名等。在Spring Boot项目中集成MyBatis,可以实现高效、便捷的数据库访问。

2025-03-22 10:56:00 317

原创 简述什么是Spring Data?

SpringData 是一个用于简化数据库访问,并支持云服务的开源框架。主要目标是使得数据库的访问变得方便快捷,并支持 map-reduce 框架和云计算机数据服务。它支持基于关系型数据库的数据服务,如 OracleRAC等。对于拥有海量数据的项目,可以用 SpringData 来简化项目的开发,就如Spring Framework 对 JDBC,ORM 的支持一样,SpringData 会让数据访问变得更加方便。Spring Data特征·强大的存储库和自定义对象映射抽象·从存储库方法名称派生动态

2025-03-22 10:52:31 346

原创 简述Spring Boot中的监视器

通过使用Spring Boot Actuator,可以轻松地获取应用的健康状态、性能指标、配置信息等,并且可以在运行时对应用进行一些操作,如刷新配置、关闭应用等。总之,Spring Boot Actuator为微服务架构下的开发与运维提供了极大的便利性,不仅简化了日常监控工作,还增强了系统的可观测性和维护性。- 默认情况下,部分端点是启用的,但为了安全起见,建议根据实际需要开启特定的端点,并设置相应的访问权限。1. 健康检查:可以查看应用程序的健康状况,包括数据库连接、磁盘空间等资源的状态。

2025-03-22 10:50:56 168

原创 Spring Boot 如何定义多套不同环境配置

通过使用 application-{profile}.yml 或 application-{profile}.properties 文件以及 spring.profiles.active 属性,你可以轻松地为不同环境定义和切换配置。Spring Boot 提供了多种方式来管理不同环境下的配置文件,最常见的方式是使用 application-{profile}.yml 或 application-{profile}.properties 文件来为不同的环境(如开发、测试、生产)定义特定的配置。

2025-03-22 10:49:55 355

原创 SpringBoot 实现热部署有哪几种方式

简介:Spring Boot 提供了一个官方的开发工具模块 spring-boot-devtools,它能够监听文件的变化并自动重启应用。- 简介:通过 Maven 或 Gradle 的增量编译功能,结合 IDE 的自动构建能力,实现快速代码更新。| Spring Boot DevTools | 是 | 整体重启 | 简单 | 快速开发调试 || HotSwap | 是 | 简单代码修改 | 简单 | 轻量级开发调试 || JRebel | 否 | 无重启热更新 | 中等 | 大型项目开发 |

2025-03-22 10:48:40 395

原创 为什么需要spring-boot-maven-plugin

spring-boot-maven-plugin 是 Spring Boot 项目中不可或缺的一部分,它简化了项目的构建、打包和运行过程,同时提供了强大的功能来处理依赖管理和开发便利性问题。spring-boot-maven-plugin 将 Spring Boot 的特定功能与 Maven 构建生命周期无缝集成。在复杂的多模块 Maven 项目中,spring-boot-maven-plugin 可以帮助正确地处理模块间的依赖关系,并确保最终的可执行 JAR 文件包含所有必要的依赖。

2025-03-22 10:44:15 398

原创 Spring Boot 有哪几种读取配置的方式

Environment 是 Spring 的环境抽象,可以用来获取所有配置源中的属性值。- 将一组相关的配置项绑定到一个 POJO 类中,通常需要指定 prefix 属性。在 Spring Boot 中,有多种读取配置的方式。- 可以直接在类的字段上使用 @Value 注解来注入配置属性。- 从 JNDI 查找配置属性,适合某些特定的企业级应用环境。- 使用命令行参数 -D 或者 -- 来传递配置属性。- 使用 -D 参数在 JVM 启动时设置系统属性。- 通过操作系统的环境变量来设置配置属性。

2025-03-22 10:43:13 261

原创 Spring Boot 自动配置原理

Spring Boot 的自动配置机制通过结合 @SpringBootApplication 注解、条件注解、自动配置类和外部化配置等功能,实现了高度智能化的配置管理。具体来说,Spring Boot 会在启动时扫描类路径中的 META-INF/spring.factories 文件,从中加载配置类,并根据条件判断是否应用这些配置。通过自动配置,Spring Boot 能够根据类路径中的依赖和应用环境自动推断出合理的默认配置,从而让开发者无需手动配置即可快速启动应用程序。# 自动配置的主要原理。

2025-03-22 10:42:19 298

原创 SpringBoot的核心注解 以及常用注解

@ComponentScan:自动扫描并注册带有 @Component 及其衍生注解(如 @Service, @Repository, @Controller)的类为 Spring 容器中的 Bean。Spring Boot 是一个用于创建独立的、生产级的 Spring 应用程序的框架,它简化了配置和依赖管理。- 表示该类是一个配置类,其中包含了一个或多个 @Bean 方法,用于定义和初始化 Bean。- 标识数据访问层组件,类似于 @Component,但更具语义化,表示这是一个数据仓库类。

2025-03-22 10:40:00 288

原创 简述Spring中@Primary注解

当一个类依赖于某个接口或抽象类,并且存在多个实现类时,如果不使用 @Primary 或其他明确的指示方式,Spring 将无法确定具体应该注入哪个bean,从而抛出异常。1. 覆盖默认行为:虽然 @Primary 指定了默认注入的bean,但在某些情况下(例如测试或特定配置),你可以通过显式指定bean名称来覆盖这种默认行为。总之,@Primary 是一种简单而有效的方式,在多个候选bean之间选择默认注入的bean,帮助简化配置和避免不必要的错误。

2025-03-16 17:22:40 145

原创 Spring 框架中都用到了哪些设计模式

作用:定义了一种一对多的依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。- 作用:将一个类的接口转换成另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。- 作用:通过代理对象来控制对真实对象的访问,通常用于添加额外的功能,如事务管理、日志记录等。- 应用场景:AOP 中的增强功能,如 @Transactional 注解的实现。- 作用:动态地给一个对象添加一些额外的职责,而不必修改原有的代码结构。

2025-03-16 17:22:07 207

原创 简述@Qualifier 注解的作用

Qualifier 注解是 Spring 框架中的一个重要注解,主要用于解决自动装配(@Autowired)时遇到的多个候选 Bean 的歧义问题。具体来说,当有多个相同类型的 Bean 存在时,Spring 无法确定应该注入哪一个 Bean,这时就可以使用 @Qualifier 来指定具体的 Bean。总结来说,@Qualifier 注解的作用是在存在多个相同类型的 Bean 时,帮助 Spring 容器选择正确的 Bean 进行依赖注入,从而避免了歧义并提高了代码的可读性和灵活性。

2025-03-16 17:16:42 326

原创 请简述@Autowired和@Resource之间的区别 ?

在Spring框架中,@Autowired 和 @Resource 都是用来实现依赖注入(Dependency Injection, DI)的注解,但它们之间有一些重要的区别。- @Autowired:提供了更多的灵活性,尤其是当需要基于类型注入并且有多个候选Bean时,可以通过@Qualifier注解进一步指定具体的Bean。- @Resource:更适合那些既可能是Spring应用也可能是Java EE/Jakarta EE应用的场景,因为它是一个标准的Java注解。## 使用 @Resource。

2025-03-16 17:13:22 378

原创 解释如果Spring中出现同名bean怎么办?

在Spring框架中,如果存在同名的Bean(即具有相同ID或名称的Bean),会引发一些问题。- 如果确实需要多个同类型的Bean,并且希望在注入时优先选择某个特定的Bean,可以使用@Primary注解标记其中一个Bean为优先选择的Bean。- 如果你需要多个同类型的Bean,可以考虑将它们封装在一个集合中(如List),并在需要时根据业务逻辑选择合适的Bean。- 确保在定义Bean时使用唯一的名称。- 当有多个同类型的Bean时,可以使用@Qualifier注解来指定注入哪个具体的Bean。

2025-03-16 17:06:50 227

原创 详细阐述Spring事务的实现方式和实现原理

Spring事务管理的核心思想是通过AOP(面向切面编程)来拦截方法调用,并在方法执行前后进行事务的开启、提交或回滚操作。声明式事务管理是最常用的方式,它通过配置文件或注解来定义事务规则,而不需要在业务逻辑中编写事务管理代码。事务上下文是通过ThreadLocal变量绑定到当前线程的,确保每个线程都有独立的事务状态。- 基于XML的声明式事务管理:通过在Spring配置文件中定义事务规则,适用于不使用Java配置的情况。Spring提供了多种事务传播行为,用于控制多个事务之间的关系。

2025-03-16 17:04:30 255

原创 Spring框架提供的容器有哪些?

在现代Spring开发中,尤其是Spring Boot项目中,ApplicationContext 及其相关实现更为常用,因为它们提供了更丰富的功能和更好的集成能力。- ApplicationContext 是 BeanFactory 的子接口,除了提供 BeanFactory 的所有功能外,还增加了更多的企业级特性。- 功能扩展:ApplicationContext 提供了更多的企业级特性,如AOP、事件处理等。- BeanFactory 是最基础的IoC容器接口,提供基本的依赖注入功能。

2025-03-16 16:57:49 112

原创 将类声明为Spring的bean的注解有哪些

最常用的方式是使用 @Component 及其衍生注解(@Repository、@Service、@Controller 等)来声明bean,并结合 @ComponentScan 来扫描这些bean。如果你使用了 @Component 或其衍生注解,通常还需要在配置类或启动类上添加 @ComponentScan 注解,以便Spring能够扫描到这些注解并自动注册为bean。通过 @Configuration 注解来定义配置类,并在配置类中使用 @Bean 注解来显式地创建bean。

2025-03-16 16:56:26 273

原创 简述Spring的自动装配

Spring的自动装配(Autowiring)是其依赖注入(DI,Dependency Injection)机制的一个特性,它允许Spring容器自动解析并注入bean之间的依赖关系,而无需在代码中显式地指定这些依赖。- 自动装配虽然方便,但在某些情况下可能会导致歧义或意外的行为,特别是在容器中有多个相同类型的bean时。因此,在使用自动装配时应谨慎,并确保对依赖关系有足够的控制。总之,Spring的自动装配简化了依赖注入的过程,但开发者仍需根据具体需求选择合适的配置方式,以确保应用的稳定性和可维护性。

2025-03-16 16:54:25 126

原创 Spring中bean的作用域

request、session、application 和 websocket 主要用于Web应用中,根据不同的HTTP请求、会话或WebSocket会话创建相应的Bean实例。- 适用场景:适用于有状态的Bean,例如会话相关的对象、任务执行器等。- 行为:在Web应用中,每个HTTP请求都会创建一个新的Bean实例。- 行为:在Web应用中,每个HTTP会话都会创建一个新的Bean实例。会话结束时,Bean会被销毁。- 适用场景:适用于与用户会话相关的Bean,例如购物车、用户偏好设置等。

2025-03-16 16:52:15 159

jquery原生代码生产日历组件

因为项目需求需要,需要在web网页中嵌套一个日历组件,我便用jquery封装了一个,功能和电脑上的日期日历相似,在此分享给大家。

2015-08-04

空空如也

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

TA关注的人

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