随笔分类 -  java

java
摘要:一个主题有多个分区,只有在一个分区内的消息才有顺序性,我们可以在发送消息时指定对应的分区号或者发送消息时按照相同的业务设置相同的key,通过对应key的hashcode值找到对应的分区,这样就能将消息放入一个分区从而保证消费的顺序性。 阅读全文
posted @ 2023-09-21 16:17 程序员_YHB 阅读(166) 评论(0) 推荐(0)
摘要:(1)生产者发送消息采用异步回调发送,如果发送失败,我们可以通过回调获取消息信息,可以选择记录日志或者重试,同时生产者也可以设置消息重试机制。 (2)采用broker的复制机制保证消息在broker中不丢失:开启生产者消息确认机制为all,这样的话,当生产者发送消息到了分区之后, 不仅仅只在lead 阅读全文
posted @ 2023-09-21 16:14 程序员_YHB 阅读(1639) 评论(0) 推荐(0)
摘要:(1)消费者可以开启多线程消费,提高消费速率。 (2)一个工作队列可以绑定多个消费者,同时消费消息。 (3)扩大队列容积,提高堆积上限。比如集群搭建。 (4)采用RabbitMQ惰性队列: ①接收到消息后直接存入磁盘而非内存。 ②消费者要消费消息时才会从磁盘中读取并加载到内存。 ③支持数百万条的消息 阅读全文
posted @ 2023-09-21 16:05 程序员_YHB 阅读(170) 评论(0) 推荐(0)
摘要:延迟队列:延迟队列就是由死信交换机+消息的存活时间(TTL)实现的,如果队列中的消息超时未消费,就会将这个消息投递到死信交换机,死信交换机还可以绑定其它队列,在我们发消 息的时候可以按照需求指定TTL的时间,这样就实现了延迟队列的功能了。 阅读全文
posted @ 2023-09-21 16:00 程序员_YHB 阅读(28) 评论(0) 推荐(0)
摘要:产生重复消费的原因:当消费者消费完消息之后还没来的及给消息队列返回ack,此时MQ宕机了,当在次重启时就可能再次消费这条消息,就产生了重复消费。 解决方法:每一个消息都有一个唯一标识,我们可以在消费消息前去数据库中查询一下是否存在这条消息,如果存在说明重复消费了,如果不存在说明没有消费。 阅读全文
posted @ 2023-09-21 15:55 程序员_YHB 阅读(63) 评论(0) 推荐(0)
摘要:(1)开启生产者确认机制,保证消息能够到达消息队列,如果报错,可以先记录至日志中,在去修复数据。 (2)开启队列和交换机的持久化功能,保证队列中还没有被消费的消息不丢失。 (3)开启消费者确认机制为auto,由spring管理消费者消费成功时返回ack。还可以设置重试次数(如设置3次),当重试超过次 阅读全文
posted @ 2023-09-21 15:50 程序员_YHB 阅读(205) 评论(0) 推荐(0)
摘要:Spring事务传播机制是指多个包含事务的方法相互调用时该遵循的规则。 实现方式 事务传播机制是通过 TransactionInterceptor 拦截器来实现的。TransactionInterceptor 是一个AOP拦截器,它拦截方法调用,并在方法调用之前和之后启动和提交事务。 当使用 Spr 阅读全文
posted @ 2023-05-29 15:52 程序员_YHB 阅读(38) 评论(0) 推荐(0)
摘要:在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个 注解是对三个注解进行了封装,分别是: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 其中 @EnableAutoC 阅读全文
posted @ 2023-05-29 13:27 程序员_YHB 阅读(10) 评论(0) 推荐(0)
摘要:SpringMVC有四大组件: (1)前端控制器(DispatcherServlet) (2)处理器映射器(HandlerMapping) (3)处理器适配器(HandlerAdapter) (4)视图解析器(ViewReslover) 执行流程: (1)前端发送请求到前端控制器(Dispatche 阅读全文
posted @ 2023-05-29 13:05 程序员_YHB 阅读(21) 评论(0) 推荐(0)
摘要:Spring事务有两种实现方式: (1)编程式事务:自己手动控制开启事务、提交事务、回滚事务。 优点:编程式事务可以根据业务逻辑和数据操作的复杂度进行灵活的控制和处理,保证数据的一致性和完整性; 使用编程式事务时,可以控制每个事务的大小和影响范围,因此在大型系统需求变化频繁的情况下很有用,能够更方便 阅读全文
posted @ 2023-05-29 12:54 程序员_YHB 阅读(239) 评论(0) 推荐(0)
摘要:循环依赖:两个或两个以上的bean循环引用。例如:A依赖B,B依赖A。 Spring有三种循环依赖问题: (1)构造器的循环依赖:Spring无法解决构造器的循环依赖问题,但是可以使用@Lazy将bean声明为懒加载,什么时候用到这个bean在创建。 (2)非单例bean的setter循环依赖:Sp 阅读全文
posted @ 2023-05-29 12:37 程序员_YHB 阅读(96) 评论(0) 推荐(0)
摘要:首先通过BeanDefinition类获取bean的定义信息,例如:是否为单例bean、是否为懒加载等信息。 (1)调用类的构造器实例化bean。 (2)依赖注入。比如setter注入,像平时开发用的@Autowire就是这一步完成的。 (3)如果该类实现了一些Aware接口,则调用这些Aware接 阅读全文
posted @ 2023-05-29 11:19 程序员_YHB 阅读(18) 评论(0) 推荐(0)
摘要:(1)Singleton:单例bean。 (2)prototype:多例bean。每次请求都会创建一个bean。 (3)request:每次http请求都会创建一个bean,该bean仅在当前http request内有效。 (4)session:在一个HTTP Session中,一个Bean定义对 阅读全文
posted @ 2023-05-29 11:07 程序员_YHB 阅读(17) 评论(0) 推荐(0)
摘要:(1)方法没有用public修饰会导致事务失效。 解决方法:在方法上使用public修饰。 (2)使用try-catch捕获异常没有抛出异常,而是由方法自己处理会导致事务失效。 解决方法:处理了异常记得抛出。 (3)方法抛出检查异常会导致事务失效,报错也会导致事务失效。 解决方法:在@transac 阅读全文
posted @ 2023-05-29 11:00 程序员_YHB 阅读(23) 评论(0) 推荐(0)
摘要:SpringIOC和SpringAOP是Spring的两个核心组件。 SpringIOC:SpringIOC是一个管理bean的容器,能够帮我们管理bean的整个生命周期,在没有SpringIOC的时候,我们需要自己手动的管理bean以及bean的依赖关系,这样会增加耦合,而有了SpringIOC, 阅读全文
posted @ 2023-05-29 10:52 程序员_YHB 阅读(25) 评论(0) 推荐(0)
摘要:Spring并没有对单例bean作线程安全的处理,在并发条件下Spring的bean是否是线程安全的有如下两种情况: (1)无状态的bean:没有数据存储能力,例如service类和dao类都是无状态的bean,所以是线程安全的。 (2)有状态的bean:有数据存储能力,在并发环境下会发生线程安全问 阅读全文
posted @ 2023-05-29 10:34 程序员_YHB 阅读(112) 评论(0) 推荐(0)
摘要:线程池的七大参数: (1)核心线程数。 (2)最大线程数。 (3)非核心线程存活时间。 (4)非核心线程存活时间的单位。 (5)阻塞队列。 (6)线程工厂。 (7)拒绝策略。 拒绝策略有四种: (1)由主线程执行这个任务。 (2)丢弃任务不报错。 (3)丢弃任务报错。(默认) (4)丢弃最先进来的任 阅读全文
posted @ 2023-05-28 23:29 程序员_YHB 阅读(49) 评论(0) 推荐(0)
摘要:死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。 死锁的四个必要条件: (1)互斥条件:同一时刻只有一个线程持有锁。 (2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。 (3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程的资源 阅读全文
posted @ 2023-05-28 22:39 程序员_YHB 阅读(49) 评论(0) 推荐(0)
摘要:ReentrantLock和synchronized都是可重入锁。 ReentrantLock可以实现公平锁和非公平锁,默认非公平锁,而synchronized只能实现非公平锁。 ReentrantLock基于AQS实现,Synchronized基于JVM的monitor实现。 ReentrantL 阅读全文
posted @ 2023-05-28 22:18 程序员_YHB 阅读(33) 评论(0) 推荐(0)