- 博客(34)
- 收藏
- 关注
原创 【自研网关】过滤器链设计
在我们的微服务架构中,构建了一个关键组件——网关服务,它作为系统的入口,负责对所有进、出流量进行统一管理和控制。为了实现这一功能,前面文章已成功将其注册至注册中心,并从配置中心获取了相关配置。接下来,我们将深入探讨如何构建网关服务的核心部分——过滤器链。过滤器链,顾名思义,是由一系列有序排列的过滤器构成的执行链条。每个过滤器承载特定的业务逻辑,对经过的请求和响应进行特定处理。当一个过滤器完成其预设的过滤流程后,会遵循链条顺序,将请求传递给下一个过滤器继续执行。
2024-04-14 00:01:52
1239
原创 使用 JDK 的 SPI 时出现 ServiceLoader.load() 无法加载类问题
在resource下,创建多级目录或创建同级目录,应在每个目录之间用"/"隔开。META-INF 和 services 是层级关系 别写成一个文件夹了。在创建文件夹的时候不能像普通的 java 下这样创包。这样创建代码运行时容易会出现一些目录寻找不到的问题。
2024-04-09 23:44:43
506
原创 【自研网关系列】自研网关的架构设计
构建网关项目骨架,包括Client、Common、ConfigCenter、RegisterCenter、Core、HttpServer、UserServer及Dubbo模块。
2024-04-06 22:26:49
1055
1
原创 【自研网关系列】网关的技术选型以及架构设计
设计网关项目时,通过市场调研与竞品分析,聚焦于性能、安全、可观测性、路由、扩展性、多协议支持和高可用性。技术方案概要:性能:利用Netty、Caffeine、Redis优化速度与缓存。安全:集成JWT认证,暂无TLS/SSL。监控:采用Prometheus+Grafana组合。路由:基于Zuul或自定义过滤器,结合Consul/Eureka/Nacos服务发现。扩展:采用Java SPI实现插件化架构。协议:支持gRPC、Dubbo RPC与WebSocket。高可用:借助Nacos进行配置
2024-04-05 21:21:23
2373
1
原创 【自研网关系列】什么是网关,为什么需要自研网关
Yu-Gateway 自研网关。基于 Netty 与原生 Java 实现,使用 Nacos 作为注册与配置中心。项目实现多种过滤器,包含路由、负载均衡、鉴权、灰度发布等过滤器。项目代码地址:https://github.com/YYYUUU42/YuGateway-master如果对你有帮助,可以点个 star 喔
2024-04-05 19:34:48
1430
1
原创 hashCode() 是如何实现的
实际应用的基本上都是通过数学公式产生的伪随机数。严格意义上讲,伪随机数不是完全随机的,但是真随机生成比较困难,所以只要能通过一定的随机数统计检测,就可以当作真随机数来使用。所以与地址相关的生成策略有两条,在hashCode等于1或4的时候。简单来说,看起来就是一个移位寄存器,每次移入的位由寄存器中若干位取异或生成。每次新生成的位看起来是随机的。Marsaglia的xor-shift策略,支持多线程执行的状态,这可能是最好的整体实现 ,这种方式。其实就是JVM启动的一个参数,每一个分支对应一个生成策略。
2024-03-21 12:48:35
763
1
原创 利用 docker-compose 部署微服务,如何查看相关日志
首先介绍下,我们为什么要去查看日志,在微服务中,我们所开发的项目 ,每个模块都是一个微服务,这是对微服务最基本的理解, 当我们的程序在运行过程中报错时,我们不光可以在前台页面对你的代码进行调试,更直观的方法就是去你的微服务下查看日志 分析报错原因 并迅速找到解决办法,提高开发效率 ,接下来我要介绍的就是 怎么通过命令 去查看所对应的微服务日志。2. 通过命令查找到对应的服务名 (我们的服务名往往会很长,但我们只要记住开头几个字母,便可以通过模糊查询搜索到对应的服务)
2024-03-20 21:27:08
486
1
原创 自定义 Mybatis 拦截器实现权限功能
将信息存储到 TreadLocalhost 中,方便后续修改sql的时候可以读取到需要修改的字段。- method:对应接口中的哪类方法(因为可能存在重载方法);Signature来指定咱们需要拦截那个类对象的哪个方法。- type:上述四种类型中的一种;- args:对应哪一个方法的入参;切面(AuthAspect)在所在接口上添加注解。
2024-03-20 21:13:17
805
1
原创 Java 实现ip属地功能
ip2region: Ip2region (2.0 - xdb) 是一个离线 IP 数据管理框架和定位库,支持亿级别的数据段,10微秒级别的查询性能,提供了许多主流编程语言的 xdb 数据管理引擎的实现。ip2region - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。可以访问 github 或 gitee 地址详细了解。
2024-01-18 10:56:19
713
1
原创 MySQL事务
事务是一组操作的集合,这些操作必须作为⼀个不可分割的单元执⾏,即要么全部执⾏成功,要么全部失败回滚。事务通常涉及到对数据库中的数据进⾏读写操作。原⼦性(Atomicity)、⼀致性(Consistency)、隔离性(Isolation)和持久性(Durability)。A 向 B 转账 500,转账成功,A 扣除500块,B增加了500块,InnoDB 引擎通过什么技术来保证事务的这四个特性的呢?
2023-12-18 19:24:11
524
原创 什么是线程池
在项目中,使用 ThreadPoolExecutor 实现灵活的定义线程池,并通过ArrayBlockingQueue 存放任务。针对不同的业务定义不同的线程池,让它们互不影响。来调整线程池的参数。
2023-12-15 14:09:02
514
原创 Redis持久化机制
因为 AOF 日志记录的是操作命令,不是实际的数据,所以用 AOF 方法做故障恢复时,需要全量把日志都执行一遍,一旦 AOF 日志非常多,势必会造成 Redis 的恢复操作缓慢。Redis 在执行完一条写操作命令后,就会把该命令以追加的方式写入到一个文件里,然后 Redis 重启时,会读取该文件记录的命令,然后逐一执行命令的方式来进行数据恢复。所以,RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。Redis 的快照是。
2023-12-14 15:18:37
1660
1
原创 类的生命周期
加载、连接、初始化、使用、和卸载。其中的连接又分为验证、准备和解析三个步骤。启动Java程序一定会启动加载(从磁盘加载到内存),验证(进行类的合法性校验),准备(为类的静态变量分配内存,并设为jvm默认的初值),解析(把常量池中的符号引用转换为直接引用)这几步,用到类的时候才会执行初始化(调用到静态变量或方法,对象的创建),然后就可以正常使用这个类了,使用完后,如果没有被引用之后,就会被JAM的垃圾回收器给回收掉。卸载完后再使用就继续执行初始化、使用、卸载这三个步骤。
2023-12-13 22:04:37
915
原创 Redis常见知识点
Redis是一个基于内存的键值型(key-value)的NoSQL数据库(非关系型数据库)。key一般是String类型,而value支持丰富的数据类型,包括String、Hash、List、Set、SortedSet五种基本的类型,此外还有GEO、BitMap、HyperLogLog等其他类型。
2023-11-24 16:41:18
1043
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人