- 博客(149)
- 资源 (13)
- 问答 (1)
- 收藏
- 关注
原创 (十)Spring Cloud Alibaba 2023.x:生产级 CI/CD 全链路实战(从 Dockerfile 到 Jenkins)
本文详细介绍了基于Jenkins的微服务CI/CD全流程实践,涵盖从环境搭建到自动化部署的全套解决方案。主要内容包括:1. Jenkins容器化部署与优化配置;2. 第三方服务授权管理(GitHub、阿里云ACR、Linux服务器);3. 通用Dockerfile模板设计与实现;4. Jenkinsfile流水线逻辑开发,实现代码检出、Maven编译、镜像构建推送和远程部署的完整自动化流程。文章特别强调了生产环境下的安全实践,如非root用户运行容器、SSH密钥授权等,并提供了针对不同业务场景的优化建议。通
2025-12-21 17:57:44
649
原创 一文掌握 Spring AI:集成主流大模型的完整方案与思考
随着 AI 大模型技术的日益成熟,Spring 官方推出了 Spring AI 框架,为开发者提供了统一的大模型集成方案。开发者无需再通过繁琐的 HTTP 请求调用不同的模型 API,只需引入相应依赖,即可快速实现与各类大模型的对接。与其追捧各类 AI 开发工具,不如主动掌握和应用 AI 大模型技术。作为开发者,我们应该利用大模型的强大能力来解决实际问题、优化日常工作流程,从而在竞争中脱颖而出。实际上,无论选用哪款大模型,对于大多数日常任务的处理效果差异不大——关键在于如何创意性地应用,而非被特定工具绑定。
2025-12-09 23:00:28
1127
1
原创 基于Ollama和Spring AI:本地大模型对话与 RAG 功能实现
本文介绍了在本地部署开源AI大模型的完整方案。通过Ollama框架运行Qwen3:0.6b轻量级模型,结合SpringAI实现基础对话功能。同时采用RAG技术,使用nomic-embed-text模型和pgvector数据库构建知识库增强系统。文章详细说明了Docker环境部署、模型安装、向量数据库配置等步骤,并提供了对话接口实现和知识库上传功能的代码示例。该方案既能节省API调用费用,又能保证数据隐私,但需要2核CPU以上的服务器资源支持。对于只需基础对话功能的用户,可以跳过RAG相关配置部分。
2025-11-23 14:09:31
844
7
原创 论微服务架构下的网关设计:Nginx 与 Gateway 的边界
本文探讨了Nginx反向代理与SpringCloud Gateway在微服务架构中的差异化定位与应用场景。Nginx作为网络层网关,擅长静态资源分发和基础反向代理,但缺乏动态服务发现、鉴权限流等微服务特性支持;而SpringCloud Gateway专为微服务设计,具备动态路由、统一鉴权、灰度发布等应用层能力。文章指出,在微服务项目中错误地将Nginx作为单一网关会带来配置僵化、功能缺失等问题,建议采用Nginx(网络层)+SpringCloud Gateway(应用层)的双层架构模式,实现各司其职的网关分
2025-10-20 22:05:44
1046
5
原创 别再把快照当兜底了!论数据库设计的思考与成熟度
数据库设计中滥用JSON快照会带来严重性能问题。快照应仅保留关键业务数据用于回溯,而非全量复制。JSON快照导致查询效率低下(无法走索引)、数据膨胀、存储结构受损等问题。合理设计应区分高频访问字段(冗余存储)和历史回溯数据(快照存储),避免JSON_EXTRACT查询的性能陷阱。快照过大影响数据页命中率、索引结构、备份恢复等底层机制。成熟的设计需要在还原能力与存储成本间取得平衡,体现对业务逻辑和性能的深刻理解。
2025-10-16 22:13:03
582
原创 RocketMQ 集群部署实战:为什么我选择自己搭建,而不是现成方案
本文详细记录了使用Docker搭建RocketMQ高可用集群的完整过程。从镜像获取(支持在线拉取和手动上传两种方式)开始,逐步完成NameServer和Broker(主从节点)的配置部署,包括关键参数说明、目录权限设置和脚本修改。通过docker-compose编排实现了四个核心组件的集成部署,特别说明了主从同步机制和监控面板的配置要点。最后验证了主从节点消息同步成功,为后续开发测试提供了可靠的MQ环境。文章不仅提供详细操作步骤,还包含配置优化建议和常见问题解决方案,适合需要搭建RocketMQ集群的开发者
2025-10-11 18:16:48
1090
14
原创 从“万能 ES”到专业 ClickHouse:一次埋点数据存储的选择
本文详细介绍了通过Docker在Linux服务器上部署ClickHouse数据库的完整流程。首先说明了选择ClickHouse而非Elasticsearch处理埋点数据的优势,然后逐步讲解了镜像下载、容器配置、数据映射等具体操作步骤,包括使用DockerTarBuilder下载镜像、配置用户权限、构建容器等关键环节。最后介绍了使用DBeaver工具连接ClickHouse的配置方法,并指出需要熟悉ClickHouse特有语法才能充分发挥其性能优势。该方案适用于需要处理大规模埋点数据的场景。
2025-09-22 22:29:53
1377
9
原创 (九)Spring Cloud Alibaba 2023.x:微服务接口文档统一管理与聚合
本文介绍了在微服务架构下使用SpringDoc实现接口文档统一管理的方案。通过在网关服务配置多文档地址路由、放行访问路径,并在业务服务中引入公共文档配置类,实现了分散接口的集中展示。方案基于SpringBoot 3.3.5、SpringCloud 2023.0.1和JDK17,支持全局Token认证配置,最终可通过网关统一地址访问所有服务的Swagger文档界面,解决了微服务接口分散管理的问题。
2025-09-11 13:41:24
926
8
原创 (八)Spring Cloud Alibaba 2023.x:网关统一鉴权与登录实现
本文介绍了基于Spring Cloud Alibaba的微服务实践,重点讨论了API管理和服务鉴权设计。作者对比了统一API服务与子服务自治两种方案,推荐采用子服务自治以降低耦合、提高扩展性。文章详细展示了用户服务登录功能、网关统一鉴权及公共服务模块的实现,包括配置文件、依赖引入、核心代码逻辑等。通过JWT+Redis实现认证,并在网关层完成统一鉴权,各业务服务共享公共模块工具类。项目采用Spring Boot 3.x新特性优化配置管理,提供完整的微服务基础架构解决方案。源码已开源在GitHub供参考。
2025-09-08 00:35:03
1467
13
原创 Elasticsearch 8.x 集成与 Java API 使用指南
随着 Elasticsearch 8.x 的发布,公司决定将现有的 Elasticsearch 7.x 版本升级到 8.x。然而,在升级过程中,我们发现许多 API 和功能发生了不兼容的变化,导致系统在迁移过程中遇到了大量问题。虽然官方文档提供了基本的操作指南,但实际应用中涉及的细节和调整却并未得到充分覆盖。为了帮助大家更顺利地过渡到 8.x,并有效应对这些变化, 本文将详细探讨 Elasticsearch 8.x 与 7.x 版本之间的主要差异,特别是在 Java 开发中的实际应用与迁移问题。
2024-12-19 14:43:21
6007
34
原创 (七)Spring Cloud Alibaba 2023.x:RocketMQ 消息队列配置与实现
在微服务架构中,异步消息通信是实现系统解耦、提高性能和增强系统可靠性的重要手段。在 Spring Cloud Alibaba 生态中,RocketMQ 与 Spring Boot 深度集成,提供了开箱即用的消息通信解决方案,极大地简化了开发流程,提升了系统的扩展性和可维护性。
2024-12-18 16:29:43
2194
10
原创 (六)Spring Cloud Alibaba 2023.x:Sentinel 流量控制与熔断限流实现
在微服务架构中,流量控制组件至关重要,它是保障系统稳定性与高可用性的核心手段之一。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。
2024-12-17 14:09:26
1505
5
原创 (五)Spring Cloud Alibaba 2023.x:Seata 分布式事务配置与实现
在微服务架构中,分布式事务是确保多个服务之间数据一致性和完整性的关键。随着微服务的拆分,传统的单体事务无法满足跨服务的事务管理需求,这时分布式事务变得尤为重要。Seata作为一款轻量级、高性能的分布式事务解决方案,通过提供全局事务管理自动回滚等功能,帮助开发者轻松处理分布式系统中的事务问题,避免了数据不一致和服务失败的风险。
2024-12-16 16:41:14
3760
27
原创 (四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
Spring cloud alibaba 体系中构建微服务,我们使用Spring Cloud Gateway 作为服务网关, Gateway是Spring 官方推出的一款基于 WebFlux 的高性能、轻量级网关框架,支持动态路由、限流熔断、过滤器链等功能,且与 Spring 生态深度集成,易于上手并具有广泛的社区支持。
2024-12-16 11:41:26
1237
原创 (三)Spring Cloud Alibaba 2023.x:OpenFeign 实现高效远程调用
在现代微服务架构中,服务之间的通信至关重要。OpenFeign是一个声明式的 Web 服务客户端,它让我们可以通过简洁的注解方式实现 HTTP 请求的远程调用。
2024-12-16 11:34:24
1422
原创 (二)Spring Cloud Alibaba 2023.x:轻松集成 Nacos 注册与配置中心
本篇使用alibabanacos它可以作为微服务的注册中心和配置中心以及配置文件动态刷新,所以本篇就一起实现了。它对应了spring cloud中的注册中心 Spring Cloud NetflixEureka以及配置中心spring cloudconfig(动态刷新还要配合使用 Spring CloudBus组件)。nacos以一抵三,可以想象他的强大之处了。
2024-12-16 11:26:14
2691
3
原创 (一)Spring Cloud Alibaba 2023.x:快速构建微服务项目
在学习和使用的过程中,我发现市面上很少有适合新手的详细系列教程,特别是针对最新版本(2023.x)的完整集成与实战案例 , 这对于初学者来说,无疑增加了入门难度。这系列博客源于我的亲身实践和问题排查经验,将带你从零开始学习 Spring Cloud Alibaba,逐步掌握各组件的使用与集成,无论是服务注册与发现负载均衡分布式事务,还是限流降级消息队列配置中心等核心功能,都提供了详尽的解析和代码示例!
2024-12-16 11:11:24
2213
1
原创 深入理解Java 线程并发编排工具: 概述和应用场景
在 Java 的 java.util.concurrent (JUC) 包中,提供了四种核心并发工具类:CountDownLatch、CyclicBarrier、Semaphore 和 Condition。它们在多线程编程中用于协调线程的执行顺序和资源访问,确保在复杂的并发场景下各任务按照预期顺序和条件完成。通过合理使用这些工具,可以大幅提升程序的可靠性和执行效率。本文将逐一介绍这四种工具的特点和使用场景,帮助大家更好地掌握多线程编程中的关键协作机制。
2024-10-31 17:16:35
1508
5
原创 彻底搞懂 ThreadLocal:原理解析与实际应用
ThreadLcoal也是我们在面试中出现频率很高的技术点,大多时候的回答也只是表面的概念并没有深入其中为了应付面试,这里我们打破砂锅学到底,真正把他弄清楚。这里简单介绍下ThreadLcoal旨在解决多线程环境中的共享资源并发问题。它为每个线程提供一个独立的内存空间,以存储该线程的临界变量,这些变量也被称为线程的副本。由于每个线程都拥有自己的副本,因此线程之间互不干扰,从而消除了资源竞争和并发问题。
2024-10-25 22:54:16
1886
10
原创 深入解析 ThreadPoolExecutor:参数配置与源码分析
多线程是我们开发中永远绕不开的,但要合理的使用它就需要用到线程池,线程池是一种通过复用现有线程来管理和优化多线程任务的一种机制,在面试中也是必问的知识点,本篇深入理解线程池的各个属性和使用。前面学习了线程池的各个属性,在真实开发中我们该如何使用线程池呢,各个参数该怎么设置,或者直接使用JDK默认的4中创建方式?默认的方式一般都是用于特殊的场景,对于通用场景存在缺陷,所以一般需要根据项目实际情况自己设置相关参数。
2024-10-22 14:54:23
1709
10
原创 多线程优化API请求:CountDownLatch与PriorityBlockingQueue的应用
写这篇文章的缘由是因为之前在面试期间经常被提到的一个场景题,“前端向后端发起一个API请求,该API需要处理复杂的业务逻辑,涉及多个相互独立的业务模块。每个业务模块都需要执行特定的操作,且这些操作彼此之间没有依赖关系。然而,每个模块的处理都需要一定的时间,导致整体的接口响应时间较长,请给出优化接口的方案,而且结果必须通过当前接口返回”。或许大家立马想到的都是通过多线程或者通过队列异步来完成,结果延迟返回,问题的难点在于怎么能在当前接口返回最终的结果呢?在学习完RocketMq源码后我找到了最佳方案。
2024-07-27 20:59:42
2122
30
原创 深入理解 Java NIO:ByteBuffer和MappedByteBuffer的特性与使用
在深入学习 RocketMQ 这款高性能消息队列框架的源码时,发现ByteBuffer和在 RocketMQ 这样的高性能消息队列框架中扮演了关键角色,其核心部分广泛使用了这两种缓冲区,以实现高效的数据存储和异步刷盘操作。接下来就深入学习ByteBuffer 和 MappedByteBuffer 的工作原理、优势特点,以便能运用到实际业务中。
2024-07-25 17:40:47
2084
13
原创 深入解读 RocketMQ 源码(七):Broker 消费队列 ConsumeQueue 的持久化机制
说到RocketMq的持久化,我们可能第一时间想到的是Message的持久化,Message通过Broker最终持久化到磁盘的CommitLog文件,但是这仅仅只是将Message进行了存储,它最终是需要提供给Consumer消费的,通过前面的学习我们知道一个CommitLog文件可以存储1G的数据,在Message量大的情况下一个CommitLog文件是不够存储所有Message的,因此就会存在多个CommitLog文件。如果Consumer需要消费一条消息,在这庞大的数据中Broker怎样才能快速定位呢
2024-07-25 10:05:04
1360
12
原创 深入解读 RocketMQ 源码(六):延迟消息与事务消息的实现原理
在之前对Message在Producer发送Broker存储Consumer消费的源码逻辑进行了分析,了解了Message整个生命周期的动态去向。但在面试中常常会被问到一些特殊消息的实现原理,却不知道从何说起。本文不深入源码细节,仅对延迟消息事务消息消息重试等特性进行整理,以便于面试时更好地回答相关问题。
2024-07-22 16:54:44
1504
8
原创 深入解读 RocketMQ 源码(五):详解 Message 消费流程
上一篇我们对Consumer的启动流程就进行了解析,有了消费者那么消费的Message从何而来呢,这就是本篇学习的重点。本篇会讲到MessageQueue的分配、Message的拉取以及消费等,让我们一起来学习吧!
2024-07-18 22:16:23
1592
2
原创 深入解读 RocketMQ 源码(四):Consumer 启动流程全解析
前面我们讲到了生产者的启动以及发送消息到Broker中,然后再到Broker存储消息都进行了源码分析。有了Broekr这个中间“媒人”,那么光有生产者怎么能行呢,我们的消费者是不是也该出场了呢。接下来我们就对消费者的启动进行流程源码走读吧!
2024-07-13 15:18:17
1403
原创 深入解读 RocketMQ 源码(三):解析 Broker 存储 Message 流程
在面试中我们经常会听到这样的回答,生产者将message发送给broker服务,然后消费者从broker中获取消息并消费,为了保证message在broker服务中不丢失,mq会对消息数据进行持久化到磁盘中。那么message到达broker服务后是如何进行存储并持久化到磁盘中的呢?这就是本篇要学习的内容。本篇涉及到的知识面比较广,在broker存储message中出现了许多我们在日常开发中并不常见但功能强大的对象!
2024-07-10 22:42:55
905
1
原创 深入解读 RocketMQ 源码(二):详解 Message 发送流程
上一篇我们已经对RocketMq生产者启动源码进行了学习《从零开始读RocketMq源码(一)生产者启动》那么本篇我们将对生产者发送消息的源码进行学习本篇对生产者发送消息源码进行了跟踪学习,希望对大家都有所收获。
2024-07-08 16:40:47
1065
原创 深入解读 RocketMQ 源码(一):Producer 启动、配置与使用详解
大概一年半前自己写了一篇《云原生》一文搞懂RocketMQ队列概述,这篇对rocketmq的相关概念和使用方法进行了整理概述,就像结尾说的都太局限于表面,简单使用还能将就,但一出现问题自己也很难排查,为了迈向技能的下一个阶段,还得是要读源码,学习大佬们的编码风格和技巧,对于使用mq以及排除问题也会更得心应手。因为最近一年自己的工作充满了波折,让自己没法静下心来学习整理,虽然现在也好不了多少,但可算能回归本心。本章篇幅比较长,将近万字,博主也是自己读源码一步一步跟踪的,所以尽量想描述得通俗易懂一些。
2024-07-06 17:40:16
1666
2
原创 【云原生】使用nginx反向代理后台多服务器
Nginx[engine x]是一个免费开源Web服务器,是一个HTTP和反向代理服务器,邮件代理服务器, 和一个通用的 TCP/UDP 代理服务器,最初由俄罗斯软件工程师Igor Sysoev撰写。nginx专注于高性能、高并发性和低内存使用率。能够在高并发下给网站提供稳定的服务。
2023-11-07 18:03:44
6855
6
原创 《温故知新》JVM虚拟机知识点聚合
1.大多数情况对象在新生代Eden分配,当Eden没有足够的空间时将发起一次Minor GC,当Edeng执行完Minor GC后还不足以为对象分配空间,则大对象直接进入老年代, 可以用参数设置大对象直接进入老年代,避免频繁的Minor GC.jdk1.8以前版本的 class和JAR包数据存储在 PermGen下面 ,PermGen 大小是固定的,而且项目之间无法共用,公有的 class,所以比较容易出现OOM异常。标记-整理算法(标记存活的对象,并向堆的一端移动,清除另一端的对象)
2023-04-24 11:32:40
246
原创 使用Canal实现mysql binlog增量订阅数据
是由公司业务改造搜索功能,使用ES搜索引擎中间件,那么我们需要将mysql中的数据同步至ES服务中,最总选择使用alibaba的canal增量订阅和解析工具。
2023-02-07 23:49:48
1904
原创 《云原生》一文搞懂RocketMQ队列概述
至此rocketMQ的基本概念大致清楚了,但是想要生产运用不仅仅止步于表面,自己更需要去深耕框架底层的逻辑实现,才能真正掌握并达到事半功倍的效果。行动起来。
2023-01-02 23:57:22
1021
2
原创 《云原生》一文搞懂rabbitMQ消息队列概述
首先对rabbitMq的相关概念进行梳理,rocketMq将在另一篇文章中展现。至此rabbitMq消息队列的相关整理告一段落,在自己加深理解的同时也能帮助到小伙伴。同时对rocketMq消息队列感兴趣的,可移步到:一文搞懂rocketMQ消息队列概述(敬请期待...)
2022-12-31 14:49:16
1328
1
原创 温故知新《设计模式》创建型模式
根据博主自己学习理解的加以概述,或许看一次并不能真正运用在实际开发中,但如果知道每一种模式适用的场景和大致的实现结构,倘若有类似的业务场景岂不是一个好的方向,并更加以深入某一模式研究学习,或许那就是自己转变的一个关键点。工厂模式:该模式相对是比较常用,适用的业务场景也比较的多适用场景:现在许多系统都有积分机制,通过完成不同的任务获得不等的积分,那么用户累计获得的积分可可以用户获取不同的奖品(兑换实体商品、兑换优惠券、兑换腾讯视频月卡…),虽然都是兑换操作,但所操作的兑换东西类型完全不同。
2022-09-15 00:55:07
459
3
原创 【云原生-k8s】Linux服务器搭建单机版kubernetes服务
作为一个开发者,学无止境是我们的座右铭,前面学习了docker相关基础操作,现在来学习kubernetes的相关基础操作。测试同事说这是要抢运维的饭碗呀,其实不然,了解学习当前行业热门或者前沿的技术无可厚非,更何况我们后端开发人员,更多的技术储备在这内卷严重的行业更是必不可少的。可参考博主另一篇文章进行安装docker:安装docker环境Kubectl使用Kubernetes API与集群进行交互,相当于是k8s的命令行工具验证二进制文件 ,下载 kubectl 校验和文件:安装kubectl
2022-08-08 22:25:56
2553
6
原创 我的四周年创作纪念日
在这期间自己也收获了许多,各个领域的大佬也不吝啬他们的知识,同时也吸收了许许多多自己领域以外更甚至是认知以外的东西,包括不限于技术、他们的成长经历等等,一直在激励着自己。那时还在大学校园,记得自己是为了搞懂一个知识点,在网上查了许多的资料,才完整的把自己心中的疑惑解答清楚,为了方便以后回头查看,同时也想着帮助和自己有相同疑惑的小伙伴不必再像自己一样到处查资料,所以写下了自己的第一篇博文,渐渐的自己也加入了万千创作者中的一员。学习不是一遍又一遍的证明自己的杰出,在学习中找到自己的不足才正是我们需要的。...
2022-08-02 21:18:27
217
3
原创 【云原生】docker环境中安装mysql、redis服务
要想使用docker,最低成本只需要一台服务器,但还需要在服务器中安装docker环境,使用docker能快捷的搭建诸如mysql、redis的独立服务,服务之间相互独立,避免了多个服务需要多台服务器的弊端等。注MYSQL_ROOT_PASSWORD设置mysql登录密码默认账户名为root。注推荐使用8.0以下的版本,避免出现不可预料的错误导致连接失败。拉取mysql镜像,这里选择官方mysql5.7版本。查看mysql在docker中央仓库的各个版本。4.查看redis容器。.........
2022-07-21 00:17:20
1033
6
原创 【云原生】springboot项目打包部署docker镜像
在java_docker中执行命令进行镜像构建(前提服务器已安装docker环境)使用工具上传jar和dockerfile到java_docker文件夹中。打包完成后,项目中会生成一个target文件夹,打开找到生成的jar包。进入远程服务器,创建一个文件夹java_docker用于存放上传的文件。如果进入服务器是/结尾,则需要切换到root用户模式~现在再来试试不依赖第三方框架,手动发布docker镜像。打开idea,找到右侧maven项,依次点击命令。sha不si我的,只会让我更强大......
2022-07-20 08:06:30
682
alibaba sentinel 控制面板sentinel-dashboard-1.8.8.jar
2024-11-26
redis的Java客户端开发包Jedis
2018-09-24
docker 进入运行中容器内部的命令是什么啊?
2022-07-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅