鹤冲天Pro
阿里云专家博主、新星计划导师、Java领域新星创作者、全栈领域优质创作者、CSDN内容合伙人、华为云享专家、腾讯云优秀博主、51CTO博客专家,交流合作私信+。有多年 Java+GO+JS全栈开发工作经验。熟练掌握:Java、K8s、Netty、TCP/IP、SpringCloud、Docker、MySQL、Redis、JS/TS、Vue、React、Go语言等技术。 座右铭:终身学习,持续进步;道阻且长,行则将至。
展开
-
vue3 底层实现原理
无论是使用模板还是直接手写渲染函数,对于一个组件来说,它要渲染的内容最终都是通过渲染函数产生的,然后渲染器再把渲染函数返回的虚拟 DOM 渲染为真实 DOM,这就是模板的工作原理,也是 Vue.js 渲染页面的流程。原创 2024-05-12 22:36:55 · 226 阅读 · 0 评论 -
RabbitMQ原理(五):消费者的可靠性
例如我们当前案例中,处理消息的业务逻辑是把订单状态从未支付修改为已支付。我们在用户支付成功后会发送MQ消息到交易服务,修改订单状态为已支付,就可能出现消息重复投递的情况。不过需要注意的是,交易服务并不知道用户会在什么时候支付,如果查询的时机不正确(比如查询的时候用户正在支付中),可能查询到的支付状态也不正确。因此,RabbitMQ必须知道消费者的处理状态,一旦消息处理失败才能重新投递消息。业务判断就是基于业务本身的逻辑或状态来判断是否是重复的请求或消息,不同的业务场景判断的思路也不一样。原创 2023-10-24 10:53:36 · 2494 阅读 · 25 评论 -
RabbitMQ原理(四):MQ的可靠性
消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。为了提升性能,默认情况下MQ的数据都是在内存存储的临时数据,重启后就会消失。为了保证数据的可靠性,必须配置数据持久化。原创 2023-10-24 10:48:24 · 724 阅读 · 10 评论 -
RabbitMQ原理(三):发送者的可靠性
每个只能配置一个,因此我们可以在配置类中统一设置。我们在publisher模块定义一个配置类:log . error("触发return callback,");} });} }log . error("触发return callback,");} });} }Slf4j;import orglog . error("触发return callback,");} });} }原创 2023-10-22 09:30:00 · 714 阅读 · 23 评论 -
RabbitMQ原理(二):SpringAMQP编程
由于`RabbitMQ`采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与`RabbitMQ`交互。并且`RabbitMQ`官方也提供了各种不同语言的客户端。但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。原创 2023-09-27 09:51:10 · 1564 阅读 · 8 评论 -
RabbitMQ原理(一):基础知识
微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们成这种调用方式为,也可以叫。但在很多场景下,我们可能需要采用的方式,为什么呢?我们先来看看什么是同步通讯和异步通讯。如图:两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发微信可以同时与多个人收发微信,但是往往响应会有延迟。原创 2023-09-26 16:53:48 · 1624 阅读 · 18 评论 -
Redis原理(二):Redis数据结构(下)
比如字符串”32”,如果按照字符数组来解释,它包含两个字符,它们的ASCII码分别是0x33和0x32。而value则比较复杂,为了在同⼀个dict内能够存储不同类型的value,这就需要⼀个通⽤的数据结构,这个通用的数据结构就是robj,全名是redisObject。String的内部存储结构⼀般是sds(Simple Dynamic String,可以动态扩展内存),但是如果⼀个String类型的value的值是数字,那么Redis内部会把它转成long类型来存储,从⽽减少内存的使用。原创 2023-09-29 08:45:00 · 267 阅读 · 15 评论 -
Redis原理(一):Redis数据结构(上)
我们存储k1=v1,假设k1的哈希值h =1,则1&3 =1,因此k1=v1要存储到数组角标1位置。不管是扩容还是收缩,必定会创建新的哈希表,导致哈希表的size和sizemask变化,而key的查询与sizemask有关。Dict中的HashTable就是数组结合单向链表的实现,当集合中元素较多时,必然导致哈希冲突增多,链表过长,则查询效率会大大降低。将dict.ht[1]赋值给dict.ht[0],给dict.ht[1]初始化为空哈希表,释放原来的dict.ht[0]的内存。原创 2023-09-26 11:58:29 · 527 阅读 · 24 评论