# Middleware **Repository Path**: xiaoliang-practice/middleware ## Basic Information - **Project Name**: Middleware - **Description**: 中间件Demo大合集 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 中间件-项目-概览 ## 1.SqlLite > SQLlite是一种及其轻量型数据库。 > > - 很轻量,整个数据库就是一个DB文件。 > - 支持事务的关系型数据库。 > - 嵌入式都在用的边缘端数据库。 > - 完全免费、开源、跨平台。 **数据库对比** | 数据库 | 理论最大容量 | 实际工程常用上限 | 定位 | | ---------- | ------------------- | ------------------- | ------------------ | | **SQLite** | 单个库 **281 TB** | 建议 ≤ **50 GB** | 嵌入式、本地存储 | | **H2** | 单个库 **约 1 EB** | 建议 ≤ **10 GB** | 开发测试、轻量业务 | | **MySQL** | 单表最大 **256 TB** | 业务常用 ≤ **1 TB** | 生产服务、高并发 | **如何使用?** 1.引入sqllite依赖 ```xml org.xerial sqlite-jdbc 3.36.0.3 ``` 2.可使用JDBC、Mybatis-Plus (URL指向DB文件即可)操作数据库。 > 可以试着让AI来完成项目搭建。 ## 2.Apache - Thrift > 它是Apache家的 | 对比项 | **Dubbo** | **OpenFeign** | **Thrift** | | --------------- | ------------------------------ | ----------------------------- | -------------------------------- | | **本质** | **Java 高性能 RPC 框架** | **HTTP 声明式调用(假 RPC)** | **跨语言二进制 RPC 协议** | | **底层协议** | Dubbo 协议 / TCP | HTTP 1.1 | TCP 二进制 | | **数据格式** | Hessian2(二进制) | JSON | 二进制 | | **跨语言** | ❌ 仅 Java 生态 | ✅ 支持(HTTP 通用) | ✅ **极强,全语言支持** | | **性能速度** | 🔥 **极快(最高)** | ⚠️ 一般(HTTP 最慢) | 🔥 **极快** | | **使用难度** | 中等 | ✅ **最简单** | 较难(需 IDL 定义) | | **Spring 生态** | 完美适配 | 🌱 **SpringCloud 亲儿子** | 需手动整合 | | **服务治理** | 注册中心、负载均衡、限流、降级 | 依赖 Cloud 组件 | 无内置,需自己实现 | | **主流场景** | 国内微服务、高并发、大厂 | 中小企业、SpringCloud 项目 | 大数据、多语言、游戏后端 | | **公司代表** | 阿里、京东、美团 | 国内 90% 中小企业 | Facebook、HBase、Spark、游戏公司 | Thirft原理: > 直观对比(核心) - .thrift 定义的是“合同”(有哪些方法、入参/返回是什么) - 桩代码实现的是“通信”和“格式转换” - 你写的代码实现的是“业务逻辑/返回什么” **快速上手** > 1. 下载thrift编译器: https://thrift.apache.org/download > > 2. 引入依赖 > > - ```xml > > org.apache.thrift > libthrift > 0.22.0 > > ``` > > 3. 查看gitee的Demo > > - https://gitee.com/xiaoliang-practice/middleware ## 3.Apache - Flink ## 4.Nerry 网络通讯 > 核心教程: https://cloud.tencent.com/developer/article/1748761 **Netty与tomcat的关系** | 上层框架(你写代码) | 底层容器(真正干活) | 模式 | | -------------------- | -------------------- | ---------- | | **Spring MVC** | **Tomcat** | 同步阻塞 | | **Spring WebFlux** | **Netty** | 异步非阻塞 | **常见的网络协议** | 名称 | 属于哪一层 | 本质是什么 | 连接特点 | 传输方向 | 典型场景 | 可靠性 | | ------------- | ---------- | ---------------------- | ------------------------------- | ------------- | ------------------------ | ---------------- | | **TCP** | 传输层 | 传输协议 | 有连接、稳定 | 双向 | 网页、支付、文件、RPC | 高(不丢、不乱) | | **UDP** | 传输层 | 传输协议 | 无连接、快 | 双向 | 直播、语音、游戏实时同步 | 低(可能丢包) | | **Socket** | API 接口 | 编程工具 | 不是协议,是操作 TCP/UDP 的方式 | 双向 | 一切网络编程 | 依赖底层协议 | | **HTTP** | 应用层 | 应用协议(基于 TCP) | 短连接、请求 - 响应 | 客户端→服务端 | 接口、网页、SpringBoot | 高 | | **SSE** | 应用层 | 推送协议(基于 HTTP) | 长连接、单向 | 服务端→客户端 | 通知、股价、新闻 | 高 | | **WebSocket** | 应用层 | 长连接协议(基于 TCP) | 长连接、全双工 | 双向自由推送 | 聊天、弹幕、游戏、大屏 | 高 | > 1.netty是什么? **Netty** 是一款 **基于 Java NIO 封装的、高性能异步网络编程** 的通讯框架。 - 写 **自定义协议** - Dubbo、Gateway、RocketMQ 、Elasticsearch、Redis 客户端。底层都用它。90% 的高性能中间件,底层全是 Netty。 - 写 **客户端 与 服务端** 交互 - 长连接、高并发、低延迟,适合游戏、IM、网关、推送。 > 2.netty能干什么? **Netty 就是一个:高性能、高稳定、封装好的「TCP 通信工具箱」**。 它帮你做 4 件事: 1. **建立连接**(客户端 ↔ 服务端) 2. **发送数据** 3. **接收数据** 4. **处理异常、断连、并发、性能** 你只需要写:**收到消息后要做什么业务**。 > #### Netty五大核心组件 Netty 服务端 = **5 个组件一起干活** 1. **EventLoopGroup** → 线程池(工人团队) - **BossGroup ** 老板组:接受客户端连接 - **WorkerGroup**员工组:读写、解码编码、业务处理 2. **Bootstrap** → 启动器(总指挥) - **ServerBootstrap** → 启动服务端 - **Bootstrap**→ 启动客户端 3. **Channel** → 连接通道(客户端 ←→ 服务端之间的 “高速公路”) - **NioServerSocketChannel** → 服务端用 - **NioSocketChannel** → 客户端用 4. **Pipeline** → 流水线(传送带) - 一条链,里面放很多 **Handler** 5. **ChannelHandler** → 业务处理器(工人) - 读到消息、业务逻辑、异常处理、回复消息。 > 如何使用netty? ```xml io.netty netty-all 4.1.86.Final ``` > 如何发送消息? ```java class MyClient extends SimpleChannelInboundHandler{ @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) { ctx.writeAndFlush("hello client"); } } ``` > 如何接收消息? ```java class MyServer extends SimpleChannelInboundHandler{ @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) { // 消息自动转成 String // 自动释放内存 // 在这里处理业务 printf("Msg is:"msg); } /* channelRead :接收消息,是底层方法,可以传递消息。 channelRead0:接收消息,是业务方法,消息消费完就结束。 */ } ```