![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程思想
流浪の青春
一个专注于java开发的灵魂创作者
展开
-
什么情况下消息会成为死信
消息成为死信的三种情况:队列消息长度到达限制;消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列 , requeue=false;原队列存在消息过期设置,消息到达超时时间未被消费;...原创 2020-12-19 20:33:53 · 810 阅读 · 3 评论 -
什么是消息补偿机制?
为什么还要消息补偿机制呢? 难道消息还会丢失,没错,系统是在一个复杂的环境,不要想的太简单了,虽然以上的三种方案,基本可以保证消息的高可用不丢失的问题,但是作为有追求的程序员来讲,要绝对保证我的系统的稳定性,有一种危机意识。比如:持久化的消息,保存到硬盘过程中,当前队列节点挂了,存储节点硬盘又坏了,消息丢了,怎么办?产线网络环境太复杂,所以不知数太多,所以要做消息补偿机制 !消息补偿机制需要建立在业务数据库和MQ数据库的基础之上 , 当我们发送消息时 , 需要同时将消息数据保存在数据库中, 两者的状态原创 2020-12-19 20:30:02 · 4072 阅读 · 5 评论 -
如何保证RabbitMQ不被重复消费?
所谓消息的幂等性是指即使收到多次消息,也不会重复消费保障幂等性的核心原理就是记录消费状态消费者在消费 MQ 中的消息时,MQ 已把消息发送给消费者,消费者在给 MQ 返回 ack 时网络中断,故 MQ 未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息。所以,MQ 消费者的幂等性问题,主要在于 MQ 的重试机制,因为网络原因或客户端延迟消费导致重复消费。解决幂等性问题的解决方案有很多 , 例如 :原创 2020-12-19 20:26:02 · 726 阅读 · 4 评论 -
Mybatis的执行流程
Mybatis的具体执行流程如下: 1. 首先mybatis中xml解析是通过SqlSessionFactoryBuilder.build()方法。2. 初始化mybatis(解析xml文件构建成Configuration对象)并初始化SqlSessionFactory对象在解析xml时会同时根据其中节点做相应的初始化操作 关键节点: settings、typeAliases、mappers3. 通过SqlSesssionFactory.openSession()方法打开一个SqlSess原创 2020-12-14 11:01:20 · 3549 阅读 · 0 评论 -
缓存技术的应用有哪些?
这次为大家分享及整理一下缓存方面的技术,主要分为三个系列展开:缓存随谈系列之一:数据库缓存缓存随谈系列之二:静态缓存缓存随谈系列之三:动态缓存一、什么是数据库缓存我们知道常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且粒度也太小,一般只有表中数据没有变更的时候,数据库对应的cache才发挥了作用。但这并不能减少业务系统对数据库产生的增、删、查、改的庞大IO压力。所以数据库缓存技术在此诞生,实现热点数原创 2020-12-08 20:01:45 · 1566 阅读 · 0 评论 -
消息队列有哪些应用场景?
面试题为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因转载 2020-12-08 19:52:02 · 380 阅读 · 0 评论 -
常见的Java编程思想有哪些
java所给予的语言之一smalltalk的五个特征:1、万物皆为对象2、程序是对象的集合3、每个对象都有自己的由其他对象所构成的存储。4、每个对象都拥有其类型。(每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给它”)5、某一特定类型的所有对象都可以接收同样的消息。对象具有状态(拥有内部数据)、行为(产生行为)和标识(可以和其他对象区分开来)当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”。目标就是去创建(最好是在现有代码库中寻找)能够提供理想的服务来解决问原创 2020-12-23 16:25:58 · 2182 阅读 · 6 评论