一、监听器的添加
在 Nacos配置文件如何初始化的 里面,讲到了 NacosConfigApplicationContextInitializer,其实这里不但会做配置文件加载的初始化,还会做监听器的初始化
在 Nacos配置文件如何初始化的 里面,讲到了 NacosConfigApplicationContextInitializer,其实这里不但会做配置文件加载的初始化,还会做监听器的初始化
Nacos 自定义了一个初始化的类 NacosConfigApplicationContextInitializer,继承关系如下
public class NacosConfigApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {}
https://www.bilibili.com/video/BV13maZzJErs
Java开发者肯定都用过Redis做分布式锁,简单来说就是利用Redis的高性能,Redis加锁(插入一条数据),如果数据存在就说明已经被其它线程锁了,业务执行完毕后就释放锁(删除数据)。
但实际使用过程中,如果并发稍大,还是会存在一些问题,那么基于这些问题来学习分布式锁。有一个很好的开源工具 Redisson 用它来实现分布式锁可以有效的解决我们自定义锁的问题。
https://www.bilibili.com/video/BV19EapznEtX
https://www.bilibili.com/video/BV1ZUedzdEVr
昨天晚上系统从阿里云迁移到腾讯云,今天就出现MQ消息堆积。在已往的认知里,消息堆积基本上是消费者不给力,但在监控上看发现生产者消息很少,每秒也就几条,没理由消费者忙不过来。
但基于认知,还是第一时间去增加了消费者(把pod从3个节点加到了5个,队列始终是3个),过了几个小时又出现了消息堆积,这时候我们犯了第一个错误。当某个消费组的消费者数量大于队列数的时候,增加消费者其实是没用的。 可参看 RocketMQ 消费关系图
https://www.bilibili.com/video/BV163YyzbE9g
ConcurrentHashMap之所以是安全的map就是因为它在put的时候进行了锁处理,下面是整个put的过程,基本上都写了注释,看完之后可以帮助你更好的理解它的原理。
https://www.bilibili.com/video/BV1RqNRz5Eo6
Jenkins是一款常见的构建管理工具,配置好后操作也很简单,只需去控制台找到对应的项目,再输入分支名即可
如果每次只发个位数的项目到也还好,一个个进去点嘛。但如果一次要发几十个项目呢?这就很费时费力了。好在Jenkins提供了rest接口,可以通过接口来进行批量构建
https://www.bilibili.com/video/BV1WaNbzQEoZ
gitlab是一个常用的代码存储仓库,通常都是使用各种工具(IDEA等)创建分支,再去gitlab页面去创建/合并MR。
开发流程分支几乎都是固定的,如 feature > dev > master。现在开发几乎都是微服务,比如我们两周发一次版本,一次10-40个服务左右,在文档里面已经写好了每个MR的地址,但依旧需要每个人去合并MR,再创建 dev > master的MR,再合一遍,这里面的步骤是很长的。
https://www.bilibili.com/video/BV1FH76zGEba
上一篇SpringAI入门搭建MCP,学习了一些AI相关的知识,今天在这些知识的基础之上,来做一个小小的应用:搭建一个套餐推荐的Agent。
https://www.bilibili.com/video/BV1WYjgzbEcA
MCP已经火了很久,最近公司也在考虑用MCP来完成一些业务功能,借此机会来学习一下SpingAI的MCP。这块的学习和以往的有很大不同,以往我们总是更注重实践,AI相对来说是个新事物,且不确定,所以它的理论要强于实践。