自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 Elasticsearch7.X建模各属性文档

ES7.X索引建模各属性说明

2025-03-26 15:23:17 808

原创 自定义Spring Cloud Gateway过滤器:记录慢请求

本文将详细介绍如何实现一个自定义过滤器,用于记录响应时间超过指定阈值的请求,并展示如何支持微服务的自定义配置。通过实现自定义的Spring Cloud Gateway过滤器,我们可以灵活地监控和记录响应时间超过指定阈值的请求。如果配置启用了日志记录并且耗时超过了设定的阈值,则记录一条警告日志。这个类将负责缓存请求体,并在请求处理完成后检查响应时间是否超过了设定的阈值。如果超过了,则记录一条警告日志。启动Spring Boot应用 和 Gateway网关,并发送请求到不同的路由,观察日志输出。

2025-02-10 17:22:21 864 1

原创 高并发数据采集场景下Nginx代理Netty服务的优化配置

高并发数据采集场景下,要优化Nginx反向代理来支持多个Netty数采服务并保证稳定的性能,可以从以下几个方面对Nginx进行优化配置。

2024-12-12 15:40:31 1679 6

原创 Elasticsearch数据冷热分离

在 Elasticsearch 的每个节点的配置文件(ILM 可以自动管理数据的生命周期,包括将索引从热节点迁移到温节点、冷节点,或最终删除。

2024-11-27 16:07:07 1261

原创 SpringCloudAlibabaSidecar整合异构微服务

SpringCloudAlibabaSidecar代理异构微服务注册Nacos

2024-11-08 09:04:05 1761 2

原创 Spring的事务传播行为

Spring的事务传播行为和应用示例

2024-11-01 09:56:36 415

原创 Elastisearch查询最近一年消费金额排名前五的用户

现在这个查询已经满足我们的需求了,能够得到我们想要的结果,接下来我们尝试优化下它。上下文中,因为它们是用于过滤数据的,这可以提高性能并允许 Elasticsearch 使用缓存。实现这一需求的主要思路是通过 Elasticsearch 的聚合功能来实现。再加一个限定条件,收货地址是爱荷华州的,需要在。聚合可以用来获取每个分组中的部分文档数据。查询来过滤出过去一年内的订单记录。字段分组,并在每个分组内计算。为了获取用户的完整姓名,我们在。定义一个与索引结构相对应的实体类。定义聚合结果的 DTO 类。

2024-10-09 11:02:49 932

原创 Netty配置SSL证书加密

使用 OpenSSL 生成 CA、服务端和客户端的证书。在 Netty 中,配置SslContext来加载证书,并将其应用到中。通过 Netty 的SslHandler实现安全的加密数据传输,确保数据在传输过程中是加密的。

2024-09-14 17:21:40 1179 1

原创 Netty采集数据高效写入TDengine

通过上述设计和实现,我们构建了一个高效的数据采集服务,能够实时接收数据并在数据量达到阈值或经过一定时间后批量写入 TDengine 数据库。这种设计不仅提高了数据处理的效率,还确保了在高并发环境下的数据安全性和一致性。

2024-09-03 10:43:45 1338

原创 使用[KafkaStreams流计算框架实时计算产生报警(升级报警)

需求背景很简单,每秒钟采集一次设备数据,流计算框架需要对数据做处理,判断采集值超过100就产生报警,如果持续5分钟产生高报,持续10分钟产生高高报。流计算服务只负责产出报警到topic,下游服务负责监听topic后续处理。需要注意,当报警被处置后会向接收数据的主题发送处置信号,处置后需要重置这个设备的时间窗口,它对应的报警从新开始计算。实时计算报警,官方文档非常完善。

2024-08-23 16:35:07 702

原创 Java使用RSA算法实现数字签名及验签的过程

其主要流程是发送方使用私钥对消息生成数字签名(消息的hash),然后将签名附加到消息中并将其发送给接收方,接收方收到消息后会提取签名,并计算出消息的哈希值,然后使用发送方的公钥验证签名,判断签名是否有效,数字签名提供了相当高的安全保证。如果签名是有效的,则意味着签名确实是由持有对应私钥的实体创建的,并且消息自签名以来没有被篡改。来源确认:因为私钥是唯一的,并且只有发送方知道,所以当接收方成功验证了签名,就可以确信消息是由持有该私钥的实体发送的。生成数字签名:发送方使用自己的私钥对消息的哈希值进行签名。

2024-08-23 09:44:57 550

原创 使用Apache POI和POI-OOXML实现word模板文档自动填充功能

最近接到一个新的需求,用户创建好模板文件保存到模板库,然后使用在线文档编辑器打开模板时,将系统数据填充到模板文件并生成新的word文件,然后在线编辑,研究使用Apache POI和POI-OOXML实现了这个功能。

2024-08-19 17:12:38 745

原创 Sentinel1.8.1 控制台改造

本项目是在Sentinel控制台1.8.1的基础上改造的,实现了控制台添加、修改规则同步至Nacos配置中心,Nacos修改配置文件后也能同步至控制台,实现了流控、降级、权限、网关、系统、参数等规则持久化改造,同时引入了。Sentinel 控制台是流量控制、熔断降级规则统一配置和管理的入口,它为用户提供了机器自发现、簇点链路自发现、监控、规则配置等功能。在 Sentinel 控制台上,我们可以配置规则并实时查看流量控制效果。时序库用于保存请求QPS数据,使用MyBatisPlus查询数据。

2024-08-14 09:21:14 359

原创 ElasticSearch优化

这样,即使其中两个节点完全离线,集群仍然可以正常工作。由于 Lucene 段合并的计算量庞大,会消耗大量的 I/O,而 ES 默认让后台定期进行段合并,这可以应对绝大多数场景,如果有特殊情况需要调整,比如对于写密集型的应用,你可能希望减少段合并的频率,以减少写操作的延迟;​ 由于特殊原因导致的节点瞬时中断的问题,默认情况下,集群会等待一分钟来查看节点是否会重新加入,如果等待期间重新加入,会保持其现有的分片数据,不会触发新的分片分配,这样就可以减少 ES 在自动再平衡可用分片时所带来的极大开销。

2024-07-24 15:35:54 3138 2

原创 JavaCV + Netty实现推流直播复用、录播回放

JavaCV 是一个开源的计算机视觉和多媒体处理库,它为Java开发者提供了访问一系列底层C/C++库的能力,而无需直接编写C/C++代码。JavaCV通过JNI(Java Native Interface)和JavaCPP项目实现这一目标,使得Java应用程序能够高效地调用这些库的功能。它提供了一套统一的API,让开发者能够在Java中轻松地执行图像和视频的处理任务,如图像识别、人脸识别、字符识别、视频流媒体处理等。

2024-07-03 17:24:04 1472 15

原创 记一次Centos7文件系统调整的操作

这个文件系统通常是内存中的虚拟文件系统,大小取决于系统内存。tmpfs:挂载点/sys/fs/cgroup,这是一个内存中的文件系统,用于存放控制组 (cgroup) 的信息和配置。tmpfs:挂载点/run,这是一个临时文件系统,用于存放系统启动和运行时的临时文件,它也是内存中的文件系统。在不增加磁盘的情况下想调整根文件系统空间的话,只能缩小其他文件系统,在实操之前应该先知道每个文件系统是干嘛的。tmpfs:挂载点/run/user/{userId},为某个用户分配的临时文件系统,通常用于存储临时会话。

2024-06-13 11:27:06 476

原创 常用工具和SQL

2.根据创建时间统计每月新增记录数。特点是严格按照年月日计算的年龄。

2024-06-04 10:03:23 647

原创 List对象集合根据某个字段的值去重

【代码】List对象集合根据某个字段的值去重。

2024-05-21 10:59:50 411

原创 ElasticSearch语法

v返回结果。

2024-05-10 14:07:24 1040

原创 GateWay网关 和 Nacos 实现灰度发布解决方案

到此不仅完成了灰度发布的解决方案,而且也兼容了Nacos同集群优先调用和权重选择策略,实现多个灰度实例按权重获取。

2024-04-09 19:23:15 2357

原创 MySQL查询某些字段相同的重复数据

子句筛选出重复数据,即出现次数大于 1 的数据。查询结果将会包含重复的。要根据两个字段查询 MySQL 中的重复数据,可以使用。这个查询将会返回所有包含重复。组合以及它们的重复次数。

2024-03-28 10:48:41 1531 1

原创 Netty优化

这样可以显著减少连接建立的延迟,特别是对于网络延迟较高的情况下,可以加速连接建立过程。当服务器正在处理连接请求的时候,新来的连接请求会被放到等待队列backlog中,直到服务器有空闲的资源去处理这些连接请求,当等待连接队列已满时,新的连接请求会被拒绝,抛出AnnotatedConnectException。SO_KEEPALIVE是TCP层面的,主要用于检测连接是否断开,心跳机制是应用层面的,通常用于检测连接的健康状态,例如检测连接是否超时、是否收到了预期的数据等,这两种机制构成了TCP长连接。

2024-03-04 17:32:51 1272 2

原创 Netty中Channel发送缓冲的读写状态切换引发的思考

当写入数据到Channel的发送缓冲区时,如果此时缓冲区已满或者剩余空间大于高水位标记,状态为不可写,直到有数据发送出去才会变为可写,Netty也提供了channelWritabilityChanged事件,它会在Channel的可写状态发生变化时触发,通常用来在发送大量数据时暂停写入,避免缓冲区溢出。当发送缓冲区的大小超过高水位线时,Netty 会停止读取数据,直到缓冲区大小降到低水位线以下才会继续读取数据,这样可以避免发送缓冲区溢出。的构造方法需要传入两个参数,分别是发送缓冲区的高水位线和低水位线。

2024-03-01 17:26:11 611

原创 Netty客户端自动重连和服务端异步关闭

【代码】Netty客户端自动重连。

2024-03-01 17:06:25 391

原创 使用MyBatisPlus、递归方式组装字典树形结构

递归组装字典树

2024-02-05 14:10:06 652 1

原创 MyBatisPlus批量插入优化

到此已经实现了批量插入的优化,但是为了防止条目过多,超出SQL限制,又在Service层做了限制,增加了递归处理。

2024-02-02 16:09:32 381 1

原创 对于操作系统“零拷贝”的一些理解

传统的数据传输方式涉及到两次数据拷贝,即从应用程序的缓冲区拷贝到内核缓冲区,然后再从内核缓冲区拷贝到目标缓冲区。“目标缓冲区”指的是数据将要被传输到的位置,可以是文件、网络连接或其他设备,在数据传输的最终阶段,数据从内核缓冲区传输到目标缓冲区的过程中可能会涉及到多次拷贝,但如果使用零拷贝技术,目标缓冲区和内核缓冲区就可以共享相同的内存,避免实际的数据拷贝。当应用程序进行 IO 操作时,对于输出操作,数据会首先从程序的缓冲区读取写入到内核缓冲区,对于输入操作,或者从内核缓冲区读取写入到程序的缓冲区。

2024-01-31 10:35:30 156

原创 SpringBoot使用@ConfigurationProperties和@PostConstruct注解优雅读取yaml配置

的方法在构造函数调用后立即执行,将属性值设置给了静态变量,这样可以在应用程序的任何地方直接访问这些属性,非常优雅。将属性类作为组件托管到 Spring 容器中,可以在应用程序中直接注入Bean并通过GET方法获取这些属性;

2023-12-06 17:32:14 596 1

原创 Nacos同集群优先调用和基于权重的负载均衡策略

同一服务的多个实例可能分布在不同的集群中。在负载均衡调用时,需要减少跨集群的网络延迟和资源开销,提高服务之间的通信效率。还要考虑到不同的服务实例可能具有不同的性能和资源配置,有些实例可能更强大,可以处理更多的请求,而有些可能资源有限。在负载均衡过程中,具有较高权重的实例将获得更多的请求,而具有较低权重的实例将获得较少的请求。这样做的目的是减少跨集群的网络延迟和资源开销,提高服务之间的通信效率。应该通过筛选出属于相同集群的服务实例,然后再进行负载均衡选择,以确保首选选择来自同一集群的实例。

2023-10-30 10:39:25 1146 1

原创 NFS挂载文件夹

2049(TCP/UDP):NFS主服务端口2049(TCP/UDP):NFS主服务端口(TCP/UDP):动态RPC分配端口(对于NFSv2和NFSv3)使用防火墙管理工具(ufw)来打开这些端口# 打开NFS相关的端口​# 启用防火墙重启NFS服务器命令。

2023-10-19 19:51:33 259 1

原创 Netty服务端(采集服务)发送消息(指令)到客户端(设备、上位机)

后续服务端向客户端发送消息时,先从此Map中找到对应的客户端Channel,再向Channel中写入消息发送至客户端。log.info("有新的连接:[{}]", ctx.channel().id().asLongText());log.info("{}设备已下线", ctx.channel().id().asLongText());新建一个服务端发送消息的业务类,并通过客户端id在map中获取到channel通道,将消息转化成JSON后,通过。// TODO 对于消息发送失败的处理。

2023-10-11 14:23:22 4180 5

原创 Kafka集群部署和调优实践

Kafka-Zk架构的元数据存储在zookeeper中,运行时动态选举controller,由controller进行Kafka集群的管理。Kafka-Kraft架构上移除了zk的依赖,用三台controller节点代替zk集群,元数据保存在 controller 中,由 controller 直接进行 Kafka 集群管理。/** 返回信息对应的分区* @param topic 主题* @param key 消息的 key。

2023-09-26 16:32:56 601 1

原创 Redis热key

Redis cluster是由master和slave节点组成的,对某个key的读写都是根据key的hash计算出对应slot(位置),根据这个slot找到对应的分片来操作kv,比如电商的秒杀、采集服务查询在线的设备等等,可能会发生大量的请求访问同一个key,所有的请求都会到同一个server上,它的负载会很高,这个时候增加redis实例也没用,因为根据hash算法还是会到一个server,这成为了瓶颈,如果这个热点key的value比较大的话,也会造成网卡达到瓶颈,这就是“热点key”问题。

2023-09-22 09:08:48 103 1

原创 计算指定坐标周围XX公里的算法

实现原理是:先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录。

2023-09-21 13:41:44 205

原创 限制外网对公司内部服务的访问策略

例如,我们可以将不同的服务解析为二级域名,例如gitlab.gongsi.com、jenkins.gongsi.com等,并使用Nginx将传入的请求分发到各个服务。然后,在Nginx中,我们可以限制只允许特定IP地址访问这些内部服务,例如公司内部和同事家里的IP地址。为了灵活性,我们可能会允许一个较大的IP地址范围,而不是限制到具体的IP地址。最终,我们会将公网IP的访问禁止掉,这也是默认的安全组策略。尽管公司的IP地址不是固定的,但经过一周左右的观察,我们发现了三个固定的IP地址网段。

2023-09-21 13:23:13 380

原创 线程池使用心得

线程池核心参数配置,机器选型的个人心得

2023-09-21 11:21:06 81

原创 自定义注解+AOP实现多线程事务管理

自定义注解+AOP实现多线程事务管理,并发情况下有效

2023-09-20 15:36:50 259 1

原创 Canal客户端自动重连

实现了SpringBoot整合Canal的自动重连机制

2023-09-20 15:27:36 509 1

原创 Stream处理业务数据复杂排序

最近有个考勤记录排序的需求实现,要求排序规则为:缺勤、全勤、半勤,相同类型数据以上下班时间倒序排序,单纯使用SQL无法实现或者实现很复杂,查询相关资料使用Stream解决。

2023-09-20 15:02:58 368 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除