消息中心
消息聚合与管理
消息中心用于集中接收和管理平台与各业务产生的消息,你可以把业务通知推送到这里,在控制面板统一查看和处理。
- 消息长度上限为
标题 200 字符内容 20000 字符,超出部分自动截断,不会拒绝发送。 - 分类、级别、标题、内容都相同的消息,30 秒内只保留一条,避免同一事件反复刷屏。
通知渠道
通知渠道用于对接外部的推送服务,在控制面板“消息中心 - 渠道管理”中创建和管理,配置好的渠道可以先发一条测试消息确认能否正常送达。
已支持的渠道:
- Apprise
- Bark
- 钉钉
- Discord
- 飞书
- Google Chat
- Gotify
- KOOK
- pushplus
- QQ 机器人
- Server 酱
- Telegram
- 企业微信应用
- 企业微信机器人
- WPush
- WxPusher
- Webhook
适配新的通知渠道(开发者)
Fork 仓库并克隆 dev 分支到本地,然后配置开发环境
- 在根目录执行
npm install - 在
backend/目录下执行npm install,安装成功后再执行npm run generate命令生成数据库类型
开发适配
- 具体方法详见 适配指南
- 提交 PR 前依次运行
npm run lint:fix与npm run tsc,确认没有报错。
- 在根目录执行
各渠道要填什么配置,以控制面板“消息中心 - 渠道管理”页面的表单为准,也可查阅《通知渠道 API 文档》。
渠道频率限制
各推送服务方都限制了接口的调用频率,平台按渠道类型内置了对应的上限。超过上限的推送不会丢弃、只延后发出,负责排队限速的是下面节流队列一节介绍的内置机制,而只有监控告警的告警推送会进这个队列,渠道的测试发送点了就直接发出。各渠道的频率限制如下:
| 渠道 | 频率限制 |
|---|---|
| 钉钉 | 20 条/分钟 |
| Discord | 5 次/2 秒 |
| 飞书 | 5 次/秒,且 100 条/分钟 |
| Google Chat | 60 次/分钟 |
| KOOK | 60 条/分钟 |
| pushplus | 5 次/分钟 |
| QQ 机器人 | 30 条/分钟 |
| Server 酱 | 5 条/分钟 |
| Telegram | 1 条/秒 |
| 企业微信机器人 | 20 条/分钟 |
| WxPusher | 2 次/秒 |
其余渠道没有明确的官方频率限制,按平台内置的保守默认值发送。
监控告警
关于此功能的介绍和使用说明可以查看博客中的这篇文章《消息中心监控告警》
监控告警会检查每一条进入消息中心的消息,命中规则后自动通过通知渠道推送告警,规则在“消息中心 - 监控告警”中管理。
功能由 通知渠道 与 告警规则 两部分组成:
- 通知渠道:对接外部推送服务(如 Bark、钉钉)的统一配置与管理,支持连接测试与通用消息模板,详见上方通知渠道。
- 告警规则:定义什么消息需要告警以及告警到哪里。先用消息 分类(如定时任务、系统事件)与 级别(信息、警告、错误、成功)圈定要监控的消息范围,再对 标题 / 内容 设置匹配条件;条件支持文本包含、正则等多种匹配方式,可“满足全部”或“满足任一”组合,命中后发往规则关联的一个或多个通知渠道。
一条消息可以同时命中多条规则,每条规则关联的全部渠道都会各发一份,单个渠道发送失败不影响其余渠道。
告警规则分两类:
- 全局规则:命中后把这条消息推给规则关联的所有渠道。
- 一对一规则:不单独触发,需要关联全局规则。关联的全局规则命中后,按收信人名单逐行匹配消息正文,每个人只收到与自己相关的那几行,还能单独设置匹配方式、消息标题和推送渠道。
节流队列
从渠道发出去的告警分两种,实时性不一样,先分清楚:
- 监控告警的告警推送:你在“消息中心 - 监控告警”配置规则,规则命中消息后发出的告警,这种推送要进节流队列排队。
- 其它业务自带的告警通知:目前指定时任务的失败通知,在任务里直接选好通知渠道,任务一失败就即时发出、不进队列;它只把这次发送计入渠道的频率额度,避免大批任务同时失败时把渠道打爆。
监控告警的告警推送由内置的节流队列(Channel Throttle Queue)统一调度:它按渠道类型把待发告警排成队伍,再按各渠道的频率限制依次发送——就像车站排队检票,队伍再长也不会丢票,只是晚一点上车。
- 正常情况下都是即时的:消息进入消息中心后马上排队,渠道还有额度时几乎感觉不到延迟,只有短时间告警量超过渠道速度才会积压。
- 全局规则优先插队:全局规则的告警插到对应渠道队伍的最前面,先于一对一规则的告警发出,正常负载下与实时推送没有差别;一对一规则的告警排在常规队列中,只在积压时延后。
- 只延迟,不丢弃:积压多少条都会发出去,只是到得晚,渠道繁忙时延迟数秒到几分钟属正常现象。队列只保存在内存中,服务重启时还没发出的告警会一并丢失。
- 积压有提醒:某一类渠道积压超过 1000 条时,服务端日志记录一条警告,提示需要关注渠道速度或精简告警规则,不影响发送。
- 失败不重试:每条告警只尝试发送一次,同一条消息的全部失败会汇总成一条站内消息,便于集中排查。
- 不影响消息记录:消息是先保存进消息中心、再在后台匹配和推送告警的,渠道再忙再慢,也不会让消息存不进来或看不到。
对接消息中心
向消息中心推送业务消息有三种方式:
# 标题(支持 1-6 级)
## 二级标题
**加粗文本** 和 *斜体文本*
- 无序列表项
- 另一项
1. 有序列表
2. 第二项
[链接文本](https://example.com)


`行内代码`
```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):

## 引用块
> 这是一段引用文本。
> 引用可以跨多行。
>
> 引用内也可以有 **加粗** 和 \`行内代码\`。
## 列表
无序列表:
- 项目一
- 项目二
- 子项目 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 上新建脚本,把内容复制粘贴进去运行即可

