📢 Release 1.2.0(2026-10-19)现已推出
Arcadia

消息中心

消息聚合与管理

消息中心用于集中接收和管理平台与各业务产生的消息,你可以把业务通知推送到这里,在控制面板统一查看和处理。

  • 消息长度上限为 标题 200 字符 内容 20000 字符,超出部分自动截断,不会拒绝发送。
  • 分类、级别、标题、内容都相同的消息,30 秒内只保留一条,避免同一事件反复刷屏。

通知渠道

通知渠道用于对接外部的推送服务,在控制面板“消息中心 - 渠道管理”中创建和管理,配置好的渠道可以先发一条测试消息确认能否正常送达。

已支持的渠道:

  • 适配新的通知渠道(开发者)

    Fork 仓库并克隆 dev 分支到本地,然后配置开发环境

    1. 在根目录执行 npm install
    2. 在 backend/ 目录下执行 npm install,安装成功后再执行 npm run generate 命令生成数据库类型

    开发适配

    1. 具体方法详见 适配指南
    2. 提交 PR 前依次运行 npm run lint:fix 与 npm run tsc,确认没有报错。

各渠道要填什么配置,以控制面板“消息中心 - 渠道管理”页面的表单为准,也可查阅《通知渠道 API 文档》。

渠道频率限制

各推送服务方都限制了接口的调用频率,平台按渠道类型内置了对应的上限。超过上限的推送不会丢弃、只延后发出,负责排队限速的是下面节流队列一节介绍的内置机制,而只有监控告警的告警推送会进这个队列,渠道的测试发送点了就直接发出。各渠道的频率限制如下:

渠道频率限制
钉钉20 条/分钟
Discord5 次/2 秒
飞书5 次/秒,且 100 条/分钟
Google Chat60 次/分钟
KOOK60 条/分钟
pushplus5 次/分钟
QQ 机器人30 条/分钟
Server 酱5 条/分钟
Telegram1 条/秒
企业微信机器人20 条/分钟
WxPusher2 次/秒

其余渠道没有明确的官方频率限制,按平台内置的保守默认值发送。

监控告警

关于此功能的介绍和使用说明可以查看博客中的这篇文章《消息中心监控告警》

监控告警会检查每一条进入消息中心的消息,命中规则后自动通过通知渠道推送告警,规则在“消息中心 - 监控告警”中管理。

功能由 通知渠道 与 告警规则 两部分组成:

  • 通知渠道:对接外部推送服务(如 Bark、钉钉)的统一配置与管理,支持连接测试与通用消息模板,详见上方通知渠道。
  • 告警规则:定义什么消息需要告警以及告警到哪里。先用消息 分类(如定时任务、系统事件)与 级别(信息、警告、错误、成功)圈定要监控的消息范围,再对 标题 / 内容 设置匹配条件;条件支持文本包含、正则等多种匹配方式,可“满足全部”或“满足任一”组合,命中后发往规则关联的一个或多个通知渠道。

一条消息可以同时命中多条规则,每条规则关联的全部渠道都会各发一份,单个渠道发送失败不影响其余渠道。

告警规则分两类:

  • 全局规则:命中后把这条消息推给规则关联的所有渠道。
  • 一对一规则:不单独触发,需要关联全局规则。关联的全局规则命中后,按收信人名单逐行匹配消息正文,每个人只收到与自己相关的那几行,还能单独设置匹配方式、消息标题和推送渠道。

节流队列

从渠道发出去的告警分两种,实时性不一样,先分清楚:

  • 监控告警的告警推送:你在“消息中心 - 监控告警”配置规则,规则命中消息后发出的告警,这种推送要进节流队列排队。
  • 其它业务自带的告警通知:目前指定时任务的失败通知,在任务里直接选好通知渠道,任务一失败就即时发出、不进队列;它只把这次发送计入渠道的频率额度,避免大批任务同时失败时把渠道打爆。

监控告警的告警推送由内置的节流队列(Channel Throttle Queue)统一调度:它按渠道类型把待发告警排成队伍,再按各渠道的频率限制依次发送——就像车站排队检票,队伍再长也不会丢票,只是晚一点上车。

  • 正常情况下都是即时的:消息进入消息中心后马上排队,渠道还有额度时几乎感觉不到延迟,只有短时间告警量超过渠道速度才会积压。
  • 全局规则优先插队:全局规则的告警插到对应渠道队伍的最前面,先于一对一规则的告警发出,正常负载下与实时推送没有差别;一对一规则的告警排在常规队列中,只在积压时延后。
  • 只延迟,不丢弃:积压多少条都会发出去,只是到得晚,渠道繁忙时延迟数秒到几分钟属正常现象。队列只保存在内存中,服务重启时还没发出的告警会一并丢失。
  • 积压有提醒:某一类渠道积压超过 1000 条时,服务端日志记录一条警告,提示需要关注渠道速度或精简告警规则,不影响发送。
  • 失败不重试:每条告警只尝试发送一次,同一条消息的全部失败会汇总成一条站内消息,便于集中排查。
  • 不影响消息记录:消息是先保存进消息中心、再在后台匹配和推送告警的,渠道再忙再慢,也不会让消息存不进来或看不到。

对接消息中心

向消息中心推送业务消息有三种方式:

消息内容支持 Markdown 语法(自动识别)
# 标题(支持 1-6 级)
## 二级标题

**加粗文本** 和 *斜体文本*

- 无序列表项
- 另一项

1. 有序列表
2. 第二项

[链接文本](https://example.com)

![图片描述](https://example.com/image.png)
![自定义尺寸](https://example.com/image.png =200x100)

`行内代码`

```bash
// 代码块(支持语言高亮)
echo "Hello, World!"
```

> 引用文本

| 表头 | 表头 |
| :-: | --- |
| 内容 | 内容 |
消息渲染效果测试脚本(展开查看)
const message = require('/arcadia/utils/message-sdk')

!(async () => {
    console.log(await message.push('渲染测试', `# 一级标题

## 二级标题

### 三级标题

#### 四级标题

##### 五级标题

正文段落:这是一段普通文本,包含 **加粗**、*斜体*、~~删除线~~ 和 \`行内代码\` 等行内样式。行内代码示例如 \`npm install\`、\`pnpm dev\` 等命令。

第二段文本。段落之间应有适当的垂直间距。

## 链接与图片

外部链接:[Arcadia 官网](https://arcadia.cool)

不可点击链接(安全策略):[锚点链接](#section) 和 [相对路径](./page)

图片(外部 URL):

![示例图片](https://cdn.jsdelivr.net/gh/SuperManito/ArcadiaWebsite@main/brand/arcadia-pure-logo.png)

## 引用块

> 这是一段引用文本。
> 引用可以跨多行。
>
> 引用内也可以有 **加粗** 和 \`行内代码\`。

## 列表

无序列表:

- 项目一
- 项目二
  - 子项目 2.1
  - 子项目 2.2
- 项目三

有序列表:

1. 第一步:安装依赖
2. 第二步:配置环境
3. 第三步:启动服务

任务列表:

- [x] 已完成任务
- [ ] 未完成任务
- [x] 另一个已完成的任务

## 表格

| 左对齐 | 居中对齐 | 右对齐 |
| :----- | :------: | -----: |
| 单元格1 | 单元格2 | 单元格3 |
| 长文本内容 | 更多内容 | 数值123 |
| \`代码\` | [链接](https://example.com) | **加粗** |

## 代码块

无语言代码块(纯文本渲染):

\`\`\`
这是普通代码块
可以包含多行
不会进行语法高亮
\`\`\`

带语言标识的代码块(语法高亮):

\`\`\`javascript
function greet(name) {
  console.log(\`Hello, \${name}!\`);
}
greet('World');
\`\`\`

Shell 代码块:

\`\`\`shell
cd /path/to/project
npm install
npm run dev
\`\`\`

## 分割线

---

分割线上方的内容与下方的内容应有较大间距(2em)。

## 嵌套与混合

1. 有序列表第一项
   - 嵌套无序子项 A
   - 嵌套无序子项 B
2. 有序列表第二项
   > 嵌套引用块内容

结束。`))
})()

在 Arcadia 上新建脚本,把内容复制粘贴进去运行即可