
这几年写后端,越来越明显一个趋势:
不是所有业务都适合"重量级 Spring Boot 微服务"。
尤其是:
- IO 密集
- 高并发
- 事件驱动
- 逻辑拆得很碎的系统
这类场景下,Vert.x 那一套 Verticle 架构,真的很香。
这篇文章我就用 NeonBee + NeonBeeDeployable ,结合一个真实业务场景:推送通知,完整聊一聊:
- Verticle 架构是啥
- NeonBeeDeployable 怎么用
- 实际代码怎么写
- 和传统 Spring Boot 微服务到底差在哪 🤔
一、先说人话:Verticle 架构是啥?
一句话版本:
Verticle = 一个轻量、无状态、事件驱动的业务单元
在 Vert.x 里:
- 一个 Verticle 通常只做一件事
- 通过 EventBus 通信
- 不关心 HTTP、端口、线程池这些脏活累活
你可以把它理解成:
"跑在同一个 JVM 里的微服务"
而不是:
- 一个服务一个进程
- 一个服务一个端口
- 一堆 Spring Context 😅
二、NeonBeeDeployable 是干嘛的?
如果你用过原生 Vert.x,大概率会遇到这些问题:
- Verticle 生命周期要自己管
- 配置读取很乱
- 部署顺序、依赖不好处理
NeonBeeDeployable 就是来解决这些"工程化问题"的:
👉 它提供:
- 统一的 Verticle 部署入口
- 配置自动注入
- 和业务强相关的 Deployable 抽象
简单说就是:
让 Verticle 更像一个"业务组件",而不是底层框架代码
三、真实业务场景:推送一条通知 🔔
假设我们有这么一个需求:
当用户下单成功后,需要:
- 发送站内通知
- 可能后续接短信 / 邮件
- 不影响下单主流程(异步)
如果你用 Spring Boot,通常是:
- Order Service
- 调 Notification Service 的 REST API
- 或者发 MQ
在 Verticle 架构里,我们可以更轻量一点 👇
四、整体架构设计(Verticle 版)
text
OrderVerticle
|
| EventBus.send("notification.push")
↓
NotificationVerticle
|
├─ 站内通知
├─ 短信(可选)
└─ 邮件(可选)
特点:
- 没有 HTTP 调用
- 没有序列化 / 反序列化
- 全部 JVM 内异步通信
五、NotificationVerticle 示例(NeonBeeDeployable)
1️⃣ 定义通知消息对象
java
public class NotificationMessage {
public String userId;
public String title;
public String content;
}
2️⃣ 实现 NotificationVerticle
java
public class NotificationVerticle extends NeonBeeDeployable {
@Override
public void start() {
vertx.eventBus().consumer(
"notification.push",
message -> {
NotificationMessage msg =
Json.decodeValue(message.body().toString(), NotificationMessage.class);
// 模拟写数据库 / 调第三方
pushInAppNotification(msg);
message.reply("ok");
}
);
}
private void pushInAppNotification(NotificationMessage msg) {
System.out.println(
"📣 给用户 " + msg.userId +
" 推送通知:" + msg.title
);
}
}
是不是非常直白?
没有 Controller、没有 Service、没有一堆注解 👍
六、OrderVerticle 里怎么调用?
java
public class OrderVerticle extends NeonBeeDeployable {
public void onOrderCreated(String userId) {
NotificationMessage msg = new NotificationMessage();
msg.userId = userId;
msg.title = "下单成功 🎉";
msg.content = "你的订单已创建成功";
vertx.eventBus().request(
"notification.push",
Json.encode(msg),
ar -> {
if (ar.succeeded()) {
System.out.println("通知已发送");
}
}
);
}
}
这里的好处是:
- 下单逻辑 完全不关心通知怎么实现
- 通知慢了、挂了,都不影响主流程
- 后续加短信、邮件,不用动 OrderVerticle
七、和 Spring Boot 微服务对比一下 ⚔️
| 维度 | Verticle + NeonBee | Spring Boot 微服务 |
|---|---|---|
| 通信方式 | EventBus(内存级) | HTTP / MQ |
| 启动速度 | ⚡ 极快 | 🐢 偏慢 |
| 资源占用 | 🪶 很轻 | 🧱 较重 |
| 架构复杂度 | 低(少组件) | 高(网关、注册中心...) |
| 适合场景 | 高并发、事件驱动 | 复杂业务、对外 API |
⚠️ 不是说 Spring Boot 不好,而是:
Spring Boot 是"企业级全家桶"
Verticle 是"高性能业务拼装刀"
用错场景,才会痛苦。
八、什么时候我会选 Verticle 架构?🤔
我个人一般在这些情况下用:
- 网关内部逻辑
- 推送 / 通知 / 事件处理
- IM / 实时系统
- 内部高并发服务
而在这些场景还是 Spring Boot 更合适:
- 对外 REST API
- 业务模型复杂
- 团队 Vert.x 经验不足
九、总结一句话 🧠
NeonBeeDeployable + Verticle 架构,本质是在 JVM 内做"轻量级微服务"
它带来的不是"新技术炫技",而是:
- 更快
- 更简单
- 更少运维成本
如果你现在的系统:
- 微服务拆得很碎
- 但大部分服务其实只是转发 / 处理事件
那真的可以试试这一套 💡
【AI作文】