跳到主要内容

MBS 消息代理服务

简介

MBS (Message Broker Service) 是一个统一消息代理服务,已作为 Connector 集成到 Ceta 平台中。它将多种消息队列后端(Kafka、RabbitMQ、RocketMQ、ActiveMQ、PostgreSQL)封装为统一的 HTTP API,通过 MBS Connector,你可以在 Flow 中方便地进行消息的生产、订阅和确认,无需直接对接底层消息队列。

核心能力

  • 统一 HTTP 接口 - 无论底层使用哪种 MQ,API 接口完全一致
  • 消息推送 (Enqueue) - 向指定 Broker 的 Queue 发送消息,支持任意格式(JSON、XML、纯文本)
  • 基于 Webhook 的消息订阅 (Subscribe) - 注册回调地址,MBS 主动推送消息到你的服务
  • 消息确认 (ACK) - 确认已消费的消息,防止重复投递
  • 两种投递模式 - FANOUT(广播给所有订阅者)和 QUEUE(轮播,每条消息只投递给一个订阅者)
  • Callback URL 占位符 - 支持 {BROKER_NAME}{QUEUE_NAME}{MESSAGE_ID}{SUBSCRIBER_ID} 占位符动态替换
  • 消息包装 (Warp) - 支持将原始消息体编码并包装到 JSON 结构中推送
  • Token 认证与细粒度权限控制 - 支持 Broker/Queue 级别的读写权限配置,通配符匹配
  • 白名单安全控制 - 对 Callback URL 进行白名单校验,支持 IP、CIDR、主机名三种类型
  • 多后端统一管理 - 通过可视化管理后台统一管理所有 Broker、Queue、Token、白名单
  • 高可用 - 支持多实例水平扩展部署,自动 Leader 选举

在 Ceta 中的架构定位

在 Ceta 的分层架构中,MBS 通过 Connector 模块 接入平台:

┌────────────────────────────────────────────────────┐
│ Flow (流程引擎) │
│ FlowDefinition → Trigger → Instance → Job → Node │
├────────────────────────────────────────────────────┤
│ Connector (连接器) │
│ ConnectorType(MBS) → Connector实例 → Action │
├────────────────────────────────────────────────────┤
│ 外部服务 │
│ MBS Service (HTTP API) │
└────────────────────────────────────────────────────┘

Ceta 的 Connector SPI 模型为:

ConnectorType(类型模板) → Connector(实例) → Action(操作) → Groovy脚本执行

MBS Connector 遵循这个模型:

  • ConnectorType = MBS 连接器类型(定义了 baseUrl 和 token 两个参数,以及连接脚本)
  • Connector = MBS 连接器实例(填写具体的服务地址和 Token)
  • Action = 三个操作(Enqueue、Subscribe、ACK),每个 Action 通过 Groovy 脚本调用 MBS HTTP API

在 Flow 中使用时,通过 APP 节点 调用 MBS Action 完成消息相关操作。

组成部分

组成部分名称说明
ConnectorTypeMBS连接器类型定义,配置 MBS 服务地址和 Token
ActionMBS Enqueue (消息推送)向队列推送消息
ActionMBS Subscribe (消息订阅)注册 Webhook 订阅
ActionMBS ACK (消息确认)确认已消费的消息

整体消息流转

┌─────────────┐     Enqueue      ┌─────────────┐     Push       ┌─────────────┐
│ 生产者 │ ──────────────▶ │ MBS │ ────────────▶ │ 消费者 │
│ (Flow/脚本) │ │ Service │ │ (Webhook) │
└─────────────┘ └─────────────┘ └──────┬──────┘
▲ │
│ ACK │
└──────────────────────────────┘

详细流程:

  1. 生产者在 Flow 中通过 APP 节点调用 MBS Enqueue Action,将消息推送到 MBS 指定 Broker/Queue
  2. MBS 将消息存入底层 MQ(Kafka/RabbitMQ/BUILTIN 等)
  3. MBS 根据该 Queue 上的订阅配置,将消息通过 HTTP POST 推送到消费者的 Callback URL
  4. 推送时请求头中附带 X-Message-Id(消息唯一标识)
  5. 消费者处理完消息后,通过 MBS ACK Action 确认消费
  6. 如果 ACK 超时未确认(默认 30 秒),MBS 会自动重新投递消息
  7. 如果连续推送失败达到 retry 次数(默认 5 次),订阅会被自动移除

支持的消息队列后端

后端说明
BUILTIN (PostgreSQL)内置队列,无需额外部署 MQ,适合中小规模场景
Kafka高吞吐量分布式流平台,适合大数据场景
RabbitMQAMQP 消息中间件,适合复杂路由场景
RocketMQ阿里开源分布式消息系统,适合金融级可靠性场景
ActiveMQApache 消息中间件,适合传统 JMS 场景
信息

对于 Ceta 平台用户,你无需关心底层使用的是哪种 MQ。MBS 已将差异封装为统一的 HTTP API,只需知道目标 Broker 名称和 Queue 名称即可。具体使用哪种 MQ 后端由 MBS 管理员在管理后台配置。

部署前提

MBS 是一个独立部署的服务,Ceta 通过 HTTP API 与其通信。使用前需确保:

条件说明
MBS 服务已部署需要独立部署 MBS 服务(Java 17+, PostgreSQL 12+)
网络可达Ceta 实例能够访问 MBS 服务地址
Token 已创建在 MBS 管理后台创建了 API Token
Broker/Queue 已创建在 MBS 管理后台创建了目标 Broker 和 Queue
白名单已配置如需使用 Subscribe,消费者地址需加入白名单

MBS 的部署方式支持 Docker、Docker Compose 和直接 JAR 运行,详见 MBS 独立部署文档。

接入方式

MBS ConnectorType 和对应的三个 Action 已预置在平台中。使用时只需:

  1. 创建 MBS Connector 实例(填写实际的 MBS 服务地址和 Token)
  2. 在 Flow 中通过 APP 节点选择对应的 Action 即可使用