47 lines
1.9 KiB
Markdown
47 lines
1.9 KiB
Markdown
# mq-starter — 统一 MQ 抽象层("MQ 界的 JDBC")
|
||
|
||
一个独立、全平台通用的 starter。业务配一行 `mq.type` 选底层(`rocketmq` | `redis-stream`),
|
||
只面向 starter 接口编程,不关心用哪个 MQ、不管理生产者消费者;换 MQ = 改配置,业务代码一行不动。
|
||
|
||
- 坐标 groupId:`com.njcn`,版本 `1.0.0-SNAPSHOT`(Phase 2 阶段本地 `mvn install`)
|
||
- JDK 1.8 / Spring Boot 2.3.12.RELEASE / `META-INF/spring.factories` 自动装配
|
||
- **零业务依赖**:不依赖 `message-api` 等任何业务模块
|
||
|
||
## 业务视角(对外契约)
|
||
|
||
```yaml
|
||
mq:
|
||
type: redis-stream # 或 rocketmq
|
||
```
|
||
|
||
```java
|
||
// 发
|
||
@Resource MqTemplate mq;
|
||
mq.send("LN_Topic", payload);
|
||
mq.send("File_Topic", nodeId, payload); // 带路由 key
|
||
|
||
// 收(业务方法打注解,零 MQ 概念)
|
||
@MqListener(topic = "LN_Topic", group = "ln_consumer")
|
||
public void onFrontData(FrontData msg) { /* 纯业务 */ }
|
||
```
|
||
|
||
## 模块结构
|
||
|
||
| 模块 | 职责 |
|
||
|---|---|
|
||
| `mq-starter-core` | 门面 `MqTemplate` + `@MqListener` 注解扫描 + 中立信封 `MqMessage` + driver SPI + 生命周期 |
|
||
| `mq-starter-rocketmq` | rocket driver(基于官方 rocketmq-spring 编程式注册) |
|
||
| `mq-starter-redis-stream` | redis driver(复用 `redis-stream-springboot-starter` 低层件,零改动 Phase 1) |
|
||
| `mq-spring-boot-starter` | 聚合 jar,业务方只引这一个坐标 |
|
||
|
||
## 装配机制
|
||
|
||
`@ConditionalOnProperty("mq.type")` 静态二选一:两套 driver 各只在对应值下装配,
|
||
同一上下文只存在一个 `MqDriver` bean。
|
||
|
||
## 关联设计
|
||
|
||
- 设计稿:`cn-data-platform/docs/superpowers/specs/2026-06-25-mq-starter-design.md`
|
||
- 能力清单与轻量版范围:`cn-data-platform/docs/2026-06-25-mq-starter能力清单与轻量版范围.html`
|
||
- 实现计划(轻量版 Phase 2):`cn-data-platform/docs/superpowers/plans/2026-06-25-mq-starter-轻量版-phase2.md`
|