# 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:接收消息,是业务方法,消息消费完就结束。
*/
}
```