- 博客(1697)
- 资源 (17)
- 收藏
- 关注
原创 基于Spring Boot和SSE的实时消息推送系统
高效实时:毫秒级消息延迟资源友好:单连接持续复用弹性可靠:自动重连机制易于扩展:支持水平扩展根据业务需求选择合适的消息格式(JSON/Protobuf)实施完善的监控告警定期进行压力测试考虑消息持久化方案通过合理设计和优化,该方案可支持从中小规模到百万级连接的消息推送场景。
2025-08-10 14:06:30
807
原创 基于Spring SSE构建实时监控系统
通过Spring SSE构建的实时监控系统,结合上述优化策略和安全方案,可以实现高性能、高可用的监控数据推送服务,满足从基础系统监控到复杂业务指标展示的各类场景需求。
2025-08-10 14:03:13
450
原创 WebSocket集群方案解析与实现
中小型项目:优先采用广播方案,配合Redis Pub/Sub实现简单集群中大型系统:采用目标询址方案,确保消息精准投递关键业务:实现双保险机制,结合两种方案优势性能优化:重点监控会话数量和消息延迟指标容灾设计:必须实现消息持久化和重试机制├── ws-common # 公共组件 ├── ws-gateway # 接入层 ├── ws-node1 # 节点1 ├── ws-node2 # 节点2 └── ws-monitor # 监控服务。
2025-08-10 13:48:39
789
原创 基于Spring Boot和WebSocket的实时聊天系统
通过以上实现方案,我们构建了一个功能完善、性能优越且安全可靠的实时聊天系统。该系统不仅支持基本的聊天功能,还提供了消息存储、已读回执、文件传输等高级特性,同时具备良好的扩展性和可维护性。Spring Boot服务。MongoDB: 聊天记录。MySQL: 用户/关系。WebSocket连接。Redis: 在线状态。MinIO: 文件存储。Kafka: 消息分发。
2025-08-10 13:37:11
683
原创 WebSocket扫码登录系统设计与实现
安全性建议对二维码内容进行加密增加二次确认步骤实现IP白名单机制性能优化使用连接池管理WebSocket实现消息压缩传输增加负载均衡策略扩展性考虑支持多端同时登录增加登录日志记录实现登录设备管理监控指标@Bean├── qr-code-module # 二维码生成与验证 ├── websocket-module # 实时通信处理 ├── security-module # 安全控制 └── cluster-module # 集群支持。
2025-08-10 13:34:10
780
原创 Spring WebSocket安全认证与权限控制解析
通过以上方案,可以构建出企业级安全的WebSocket通信系统。HTTP握手请求(携带Token)认证拦截器校验Token。WebSocket通信。
2025-08-10 13:30:50
985
原创 Spring Boot集成WebSocket
项目架构:传统MVC还是响应式性能需求:普通消息还是高频交易扩展性:是否需要水平扩展运维成本:监控和告警能力建议从Spring原生支持方案开始,随着业务复杂度提升再逐步考虑Netty等高性能方案。连接生命周期管理消息序列化规范异常恢复机制生产环境监控通过合理的设计和配置,WebSocket可以成为构建实时应用的强大工具。
2025-08-10 13:27:41
1011
原创 Spring Boot与WebSocket构建物联网实时通信系统
通过以上方案,可以构建出高性能、高可靠的物联网实时通信系统。Spring Boot服务。
2025-08-10 13:24:52
926
原创 Spring Boot WebSocket实时在线人数统计
通过以上完整实现方案,可以构建一个高性能、可靠的实时在线人数统计系统。根据实际业务需求,可以选择内存存储或Redis集群方案,并灵活调整各项配置参数。订阅/topic/onlineUsers。WebSocket连接(/ws)发送/app/hello消息。
2025-08-10 13:22:41
721
转载 OpenFeign远程调⽤
FeignFeign 是组件中的一量级Restful的 HTTP 服务客户端,实现了负载均衡和 Rest 调用的开源框架,封装了Ribbon和, 实现了WebService的面向接口编程,进一步降低了项目的耦合度。什么是服务调用顾名思义,就是服务之间的接口互相调用,在微服务架构中很多功能都需要调用多个服务才能完成某一项功能。为什么要使用FeignFeign 旨在使编写 JAVA HTTP 客户端变得更加简单,Feign 简化了代码,实现了Ribbon。
2025-07-03 20:08:25
85
转载 搭建Java应用监控告警系统Prometheus与Grafana
干的事儿很纯粹:拉取指标、存储时序数据。它的Pull模型特别适合微服务架构,不会像Push模型那样把你的网络打爆。更关键的是,它和Spring Boot的整合简单到让人怀疑人生。负责颜值和智商。那些花里胡哨的Dashboard不是重点,重点是它能把你的业务指标和系统指标关联起来,让你一眼看出问题在哪。
2025-07-03 19:58:23
96
转载 SpringBoot集成p6spy监控sql耗时
以上我们了解了p6spy的基本作用及使用方式,一般的mybatis/plus打印的sql大概是需要自己拼接的?占位符,这里我们利用第三方工具p6psy就能直接看到sql耗时,且可直接拷贝sql出来运行。p6spy是一个开源的JDBC驱动包装器,用于拦截和记录Java应用程序与数据库之间的SQL语句、参数、执行时间等。SQL日志记录:捕获所有SQL语句及其参数,便于调试和验证ORM框架生成的SQL。慢查询检测:可配置慢查询阈值,自动标记耗时较长的SQL。5)测试sql打印(省略了集成orm那一套查询细节)
2025-07-03 19:54:01
109
转载 Java线程池实现原理及其在美团业务中的实践
线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。降低资源消耗。
2025-06-29 20:27:25
54
原创 海量数据存储与分析:HBase、ClickHouse、Doris三款数据库对比
混合架构(如HBase+Doris)可兼顾实时与分析需求,建议根据业务模块拆分使用。场景:既有实时交易记录,又需历史数据分析。交互式查询+实时更新。
2025-06-29 09:17:16
1155
转载 K8S滚动发布
容器状态还指示容器的内部ID(containerID)、容器正在运行的镜像和imageID、容器是否准备好以及重新启动的频率(restartCount)。滚动更新通过设置MaxSurge和MaxUnavailable来规定可以有多少个额外的Pod和可以忍受多少个Pod无法提供服务(两个参数可以为0,但是不能同时为0),在整个更新的过程中都是平滑无缝衔接。**两者不能同时为0maxSurge:**和期望ready的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。
2025-06-29 09:05:58
94
转载 SpringBoot + K8S 中的滚动发布、优雅停机、弹性伸缩、应用监控、配置分离
在K8s中,当我们实现滚动升级之前,务必要实现应用级别的优雅停机。否则滚动升级时,还是会影响到业务。此外,若需使用回调钩子,需保证镜像中包含curl工具,且需注意应用管理端口(50000)不能暴露到公网。k8s资源调度之滚动更新策略,若要实现零宕机发布,需支持健康检查。定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。
2025-06-29 08:58:31
81
转载 一线大厂都在使用的 RocketMQ 生产级别规范
1、 Topic 规则:一个应用尽可能用一个 Topic,如 topic_recharge_order减少 Topic 数量有助于降低 Broker 的管理和内存开销(每个 Topic 会创建多个队列和元信息)。同一应用逻辑聚焦在一个 Topic 更便于数据统计和管理,避免消息分散带来的排查困难。RocketMQ 最佳实践提倡:Topic 粗粒度,Tag 精细化。2、 Tag 规则:消息子类型则可以用 Tag 来标识,如 tag_order_create、tag_order_pay。
2025-06-27 09:31:39
62
转载 SpringBoot大文件上传卡死?分块切割术搞定GB级传输,速度飙升!
Spring Boot实现文件分块上传解决了大文件传输的核心痛点,结合断点续传、分块验证和安全控制,可构建出健壮的企业级文件传输方案。本文提供的代码可直接集成到生产环境,根据实际需求调整分块大小和并发策略。在互联网应用中,大文件上传是一个常见而棘手的挑战。传统的单文件上传方式在面对大文件时经常面临超时、内存溢出等问题。本文将深入探讨如何利用Spring Boot实现高效的分块上传方案,解决大文件传输痛点。
2025-06-25 19:45:13
43
转载 SpringBoot整合Kafka构建亿级消息系统
通过本文的实践方案,开发者可以构建日均千亿级消息处理系统。:• 并发度与分区数对齐 • 添加耗时监控埋点 • 使用Header获取元数据。提供Spring生态整合支持 • Avro实现高效二进制序列化。:LZ4压缩效率比Snappy高30%:单个批次最大字节数 •。:批量发送等待时间 •。
2025-06-25 19:42:59
31
原创 Java统计代码执行时间方式
简单场景:直接用或。高精度需求:用或Instant。多步骤计时:用 Spring 的StopWatch。无侵入统计:用 AOP(如 Spring AOP)。性能基准测试:用 JMH。
2025-06-21 09:50:37
453
原创 Mybatis拦截器与动态SQL结合
MyBatis。这些插件可以用来实现多种功能,例如性能监控、事务处理、安全控制等。Executor介绍说明:Executor拦截器主要用于拦截数据库的执行器,它负责执行MyBatis的SQL语句。作用:Executor拦截器可以拦截执行器的update(写操作)和query(读操作)方法,使你能够在执行SQL语句前后注入自定义逻辑。使用场景: 适用于需要在数据库写入或读取操作前后执行额外逻辑的情况,比如日志记录、性能监控等。介绍说明:拦截器主要用于拦截SQL语句的处理,包括SQL。
2025-06-20 09:52:29
276
原创 MyBatis-Plus中联表查询用法
MyBatisPlus并不直接支持,但是可以使用mybatisplusjoin库。在Mybatis中,我们最常用的方法是手写sql,像下面这样的标准join语句。
2025-06-20 09:39:51
186
原创 Redis的大key和热key如何解决
字符串类型(String):单个Key的Value特别大,一般认为在普通业务场景下,如果单个String类型的value大于1MB,或者在高并发低延迟场景中大于10KB,就可能被视为大Key集合数据类型:如Hash、Set、ZSet、List等,其中的元素数量过多或总体数据量过大。例如,一个Hash类型Key的成员数量虽只有1000个,但这些成员的Value总大小达到100MB,或者一个ZSet类型的Key成员数量达到10000个内存占用过高。
2025-06-20 07:51:14
1458
原创 Netty 是如何解决半包和粘包问题
半包问题是指一个完整的应用层消息被分成多个 TCP 数据包发送,接收端在一次读取操作中只接收到消息的一部分。例如,发送端发送了一条 100 字节的消息,但由于网络原因,这条消息被拆分成了两个 TCP 数据包,一个 60 字节,另一个 40 字节。接收端可能在第一次读取时只接收到前 60 字节的数据,剩下的 40 字节需要在后续的读取操作中才能接收到。基于换行符解码器和自定义分隔符解码器(比如 特殊字符)来划分消息边界,从而解决半包和粘包问题,使用者可以根据自己的需求灵活确定分隔符。
2025-06-19 16:59:28
863
原创 Spring 中拦截器(Interceptor)与过滤器(Filter)的区别
是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。③拦截器只能对action(也就是controller)请求起作用,而过滤器则可以对几乎所有的请求起作用,并且可以对请求的资源进行起作用,但是缺点是一个过滤器实例只能在容器初始化时调用一次。的反射机制的,而过滤器是基于函数回调。
2025-05-29 17:16:23
281
转载 数据实时同步:inotify + rsync 实现数据实时同步
rsync 常用于作为 linux系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合 inotify 或 sersync,可以实现触发式的实时数据同步。前两者的本质是通过本地或远程shell,而第3种方式则是让远程主机上运行 rsyncd 服务,使其监听在一个端口上,等待客户端的连接,此种方式使用的 rsync 的专有协议。inotify 是内核中的功能,在2.6.13版本的内核开始都默认存在。
2025-05-24 18:29:14
173
转载 JVM参数调优
XX:+UseStringDeduplication -XX:+DisableExplicitGC #其他优化。-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g #元空间配置。-Xloggc:/logs/gc.log -XX:+PrintGCDetails #GC日志与监控。-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize。合并重复的字符串对象,节省堆内存(适合字符串操作频繁的场景)。G1回收器(平衡型,JDK9+默认)
2025-05-22 20:16:56
78
转载 nginx实时请求监测-ngxtop
ngxtop是一个实时命令行工具,可以分析nginx访问日志,以表格形式将http请求的主要指标直观展示。ngxtop将nginx的访问请求数据实时动态展示,并支持按字段过滤请求。ubuntu环境安装,测试系统为Ubuntu 24.04.2 LTS。centos环境安装。
2025-05-22 20:06:31
61
原创 线程池线程数配置
线程数 ≈ CPU 核心数 × (1 + 任务等待时间 / 任务计算时间)CPU 密集型→ 少量线程足够;IO 密集型→ 可以设置更高;混合型任务→ 可拆分后按比例配置多个线程池。
2025-05-22 20:02:41
522
原创 java并发-Semaphore信号量
举个生活中的例子:银行总共有3个柜台办理业务,有很多人来排队,但一个柜台同时只能有一个人办理业务,也就是说最多同时只能有3个人办理业务。其他的人都要排队等待,等到有一个人办理好了,下一个人才能来办理。Semaphore是用来控制同时访问特定资源的线程数量,它通过协调各个线程,来保证合理的使用公共资源。它通过维护一组许可(permits)来限制同时访问某个资源的线程数量。以下是一个使用 Semaphore 的示例,展示如何限制同时访问某个资源的线程数量。
2025-05-22 19:54:01
389
原创 Nginx配置记录访问信息
Nginx被广泛应用于各种场景如:Web服务器、反向代理服务器、负载均衡器、Web应用防火墙(WAF)等在实际的产品开发中,无论是功能测试或访问行为审计,都需要详细记录每一次访问行为。
2025-05-20 21:10:09
549
原创 vi实时查看日志
按 Ctrl+C 停止 tail -f,然后按 Enter 返回 vim。可以在 vim 中看到实时日志,但无法直接编辑。如果只是查看日志而不需要编辑,less 更适合。在 vim 中执行 tail -f。在 vim 中打开日志文件。用 watch 定期刷新日志。重新加载文件以获取最新内容。将日志内容导入 vim。-n 1 表示每秒刷新一次。按 :e 手动刷新文件内容。
2025-05-19 21:08:57
427
原创 麒麟系统(Kylin OS) 忘记开机密码解决
不同机型按键可能不同,可尝试多次。一 进入安全模式(救援模式)passwd 用户名。
2025-04-12 09:34:16
12103
1
原创 Windows 11 中搜索服务索引文件大处理
是 Windows 11 中搜索服务索引的数据库文件,用于存储文件、邮件等内容的索引信息,以提供快速搜索结果。如果磁盘空间非常紧张,且不经常使用系统搜索功能,可以采用此方法,但不建议长期使用,因为会失去快速搜索能力。这是较为推荐的方法,能有效减小文件大小,同时保留搜索功能。暂时禁用 Windows 搜索服务并删除文件。文件或重要数据,以防操作失误导致数据丢失。在进行上述操作前,建议先备份。
2025-03-30 11:28:08
1056
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人