跳至正文

01 — 架构与边界

1. 分层

┌─────────────────────────────────────────────────────────┐
│ 客户端 / SDK                                             │
└───────────────────────────┬─────────────────────────────┘
                            │ flare.common.v1.*
┌───────────────────────────▼─────────────────────────────┐
│ flare-im-core(通信核心)                                 │
│  gateway · orchestrator · conversation · storage · sync  │
└───────────────────────────┬─────────────────────────────┘
                            │ 仅契约
┌───────────────────────────▼─────────────────────────────┐
│ flare-capability(扩展宿主)                              │
│  HookPlugin · ExtensionPlugin · Guard / Resolver 注册表   │
└───────────────────────────┬─────────────────────────────┘
                            │ gRPC / 进程内注册
┌───────────────────────────▼─────────────────────────────┐
│ 业务域(Social / 风控 / 审计 / 内容能力 …)               │
└─────────────────────────────────────────────────────────┘

2. Bounded Context

上下文拥有数据典型服务
Message消息、seq、投递orchestrator, storage
Conversation会话、游标、参与者投影conversation
Sync同步编排、快照sync-orchestrator
CapabilityHook/扩展路由、策略flare-capability
Social用户、好友、群目录flare-user, flare-relation, flare-group

禁止:在 flare-im-core 内引用 Social 的 proto / crate / 服务名常量。

3. 集成方式对照

需求推荐机制说明
发信前校验(好友、禁言)Hook pre_send可拒绝或改 draft
发信后审计Hook post_send异步友好
群目录增量Sync GROUP_DIRECTORY + 可插拔 Port默认 Noop
通用业务能力ExtensionPlugin operation最长前缀路由
进程内 Rust 插件CapabilityExtensionRegistry部署时 register

4. 调用链(发消息)

Client → Gateway → Orchestrator
                      │
                      ├─ HookDispatcher(config/hooks.toml)
                      │     └─ gRPC → flare-social-hook(可选,priority 高)
                      │
                      └─ gRPC → flare-capability HookPlugin.pre_send
                                ├─ PreSendGuard 管道(可选,bridge 注册)
                                └─ 配置的 pre_send hooks
                      → Storage / Push …

5. 与 Social 的关系

  • Social 不是 Core 子模块,而是 Capability 的提供方之一
  • Rust 单体部署可用 flare-social-im-bridge 注册 Guard / Extension;不是架构前提。
  • 跨语言:实现 flare.capability.v1.HookPlugin 即可(见 flare-social-hook 参考实现)。