Tigase 介绍与选型指南
Tigase 8.4.3 介绍与选型:基于 Java 的开源 XMPP/Jabber 服务器,覆盖架构、功能、性能、同类对比与选型建议,已在 Ubuntu 22.04 实测拉起(systemd + Derby + REST API + JVM 256–512MB 约束)。
Tigase 介绍与选型指南
目标:帮助团队快速建立对 Tigase XMPP/Jabber 服务器的全貌认知,明确其定位、架构、功能覆盖与适用边界,为后续部署与选型决策提供依据。本文以 Tigase 8.4.3-b12907 官方发行包为基准,已在 Ubuntu 22.04 / OpenJDK 17 环境完整拉起验证(systemd + Derby + Admin Console + REST API + JVM 256–512MB 堆约束)。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS |
| 架构 | x86_64 |
| Tigase 版本 | 8.4.3-b12907(2024-10 上游最新稳定) |
| JDK | OpenJDK 17(最小 11 可用) |
| 发行包 | tigase-server-8.4.3-b12907-dist.tar.gz(约 56MB,解压后约 150MB) |
| 监听端口 | 5222(c2s 客户端连接)、5269(s2s 服务器互联)、8080(HTTP Admin / REST API) |
| 运行用户 | tigase |
| 数据目录 | /home/tigase/tigase-server/data / /home/tigase/tigase-server/tigasedb(Derby 内置库) |
| 日志目录 | /home/tigase/tigase-server/logs |
| 堆内存 | -Xms256m -Xmx512m(JVM 专项约束,实测生效) |
| 数据库 | 默认 Derby(jdbc:derby:tigasedb;create=true),生产建议 PostgreSQL / MySQL |
| 进程 PID | /home/tigase/tigase-server/logs/tigase.pid |
| 主要文件 | etc/config.tdsl(DSL 配置)、etc/tigase.conf(JVM 参数)、scripts/tigase.sh(启动脚本)、scripts/systemd/tigase-server.service(systemd 单元) |
二、软件概述
2.1 定位
Tigase 是一套 开源、高性能、可扩展的 XMPP/Jabber 即时通讯服务器,使用纯 Java 编写,以 GNU Affero GPL v3 许可发布,由波兰 Tigase, Inc. 公司主导维护(官网 tigase.org)。其目标是提供一套「完整实现 XMPP 协议栈 + 大量官方 XEP 扩展 + 高并发 + 集群可水平扩展」的企业级消息基础设施——单节点实测 50 万并发用户、集群超过 100 万在线用户(官方 benchmark)。
💡 技术拓展:XMPP 协议不是唯一的即时通讯协议。常见对比——
协议 方向 代表服务器 特点 XMPP(Jabber) 异步 XML 流式 Tigase、ejabberd、Prosody、Openfire、Metronome IETF 标准,扩展靠 XEP 生态,联邦互联(S2S) Matrix 异步 JSON over WebSocket Synapse、Dendrite 联邦、端到端加密、客户端生态强 MQTT 发布/订阅 EMQX、Mosquitto IoT 轻量,无实时会话 WebSocket (自定义) 自研协议 腾讯 IM、融云 高集成度但不互操作 SIP/SIMPLE 电话网即时补充 Asterisk 运营商体系 本文聚焦 XMPP 场景。如果你需要「跨平台 IM 互操作 + 第三方 XMPP 客户端即插即用 + 成熟的 PubSub/MUC/联邦」,Tigase 是目前 Java 生态中最活跃、功能最全的选择。
2.2 版本与组件关系
Tigase 项目以 Server + 组件包 的方式发布,8.4.x 系列把所有扩展打包在同一个发行包中(jars/ 目录下约 70+ 个 jar)。关键模块:
| Jar | 组件/功能 | 备注 |
|---|---|---|
| tigase-server.jar | 核心服务器 | Main class: tigase.server.XMPPServer |
| tigase-server-dist.jar | OSGi / Felix 启动器 | 启用 OSGI=true 时使用 |
| tigase-http-api-jetty.jar + tigase-http-api.jar | HTTP Admin + REST API | Jetty 内嵌,端口 8080 |
| tigase-web-ui.war | Admin Console Web UI | /rest/ 首页即入口 |
| tigase-muc.jar | 多用户会议(MUC,XEP-0045) | 聊天室 |
| tigase-pubsub.jar | PubSub(XEP-0060) | 发布订阅节点 |
| tigase-message-archiving.jar | 消息归档(XEP-0313 MAM) | |
| tigase-stun.jar + tigase-spam.jar | STUN/TURN + 反垃圾 | |
| tigase-mongodb.jar | MongoDB 用户库后端 | 可选数据库 |
| mysql-connector-java.jar / postgresql.jar / mssql-jdbc.jar | JDBC 驱动 | 按数据库选 |
| derby.jar | Derby 内置数据库驱动 | 默认 |
| 以及 groovy / jackson / jetty / slf4j / logback | 依赖 |
2.3 许可与维护
- 许可:GNU AGPL v3(GNU Affero General Public License v3)——修改后以服务提供时必须开源。如果你要做闭源二次开发或 SaaS 分发,需要购买商业许可。
- 公司:Tigase, Inc.(波兰),2004 年起维护至今。
- GitHub:
tigase/tigase-server,8.4.x 分支活跃,2024–2026 持续发版。 - 商业支持:提供付费支持计划、托管集群、企业版增强。
三、核心架构
3.1 模块拓扑
Tigase 采用 Bean 容器 + Groovy DSL 配置 的插件化架构,启动时由 DSLBeanConfigurator 解析 config.tdsl,实例化各类 Component(Bean)。实测启动日志中加载的组件:
sess-man SessionManager 会话管理(C2S 主要入口)
rtbl-component RTBLComponent 实时黑名单/频率限制
message-router MessageRouter 消息路由
http HttpMessageReceiver HTTP API 组件(Jetty 内嵌,8080)
upload FileUploadComponent HTTP 文件上传
ext-disco ExternalServiceDiscovery XEP-0130 扩展发现
stats StatisticsCollector 统计数据
pubsub PubSubComponent XEP-0060 PubSub
s2s S2SConnectionManager 服务器互联
eventbus EventBusComponent 事件总线
muc MUCComponent XEP-0045 MUC
message-archive MessageArchiveComponent XEP-0313 MAM
amp AmpComponent 高级消息处理(XEP-0079)
mix MixComponent XEP-0369 MIX
monitor MonitorComponent 监控
启动顺序实测(9 秒完成):SessionManager → RTBLComponent → MessageRouter → Jetty HTTP (8080) → FileUpload → ExtDisco → Stats → PubSub → S2S → EventBus → HTTP API → MUC → MessageArchive → AMP → MIX → Monitor → Server finished starting up。
3.2 数据层
dataSource 以 Bean Pool 形式管理 JDBC 连接池,支持多后端:
| 后端 | 驱动 | Schema 脚本路径 | 推荐场景 |
|---|---|---|---|
| Derby | 内置 | database/derby-*.sql | 开发/测试,零依赖 |
| PostgreSQL | jars/postgresql.jar | database/postgresql-*.sql | 生产首选 |
| MySQL / MariaDB | jars/mysql-connector-java.jar | database/mysql-*.sql | 生产 |
| SQL Server | jars/mssql-jdbc.jar | database/sqlserver-*.sql | 企业内网 |
| MongoDB | jars/mongodb-driver-*.jar | 无 SQL(Mongo 原生) | 可选 |
Schema 脚本按组件+版本化组织,如 mysql-server-8.4.1.sql、mysql-muc-3.4.0.sql、mysql-http-api-2.4.2.sql。
3.3 配置模型(config.tdsl)
Tigase 的核心配置文件 etc/config.tdsl 使用 Groovy DSL 语法,结构为:
admins = [ 'admin@xmpp.example.com' ]
'config-type' = 'default'
'default-virtual-host' = 'xmpp.example.com'
dataSource () {
default () {
uri = 'jdbc:derby:tigasedb;create=true'
}
}
http () {
rest () {
open_access = true
}
}
启动后自动生成 etc/config-dump.properties(平铺所有 Bean 属性,便于排查)。
3.4 虚拟主机(VHost)
Tigase 是少数 原生支持无限虚拟主机 的 XMPP 服务器——一套进程可以跑多个域名,每个 VHost 独立用户库、独立管理员、独立组件开关,可运行时增删。VHost 元数据存在独立表 tigase_vhost。
四、功能特性速览
4.1 核心 XEP 支持(实测启动日志)
启动时加载的 XEP 插件清单(按 XEP 编号):
| XEP | 名称 | 插件名 |
|---|---|---|
| XEP-0079 | AMP 高级消息处理 | amp |
| XEP-0045 | MUC 多用户会议 | muc |
| XEP-0060 | PubSub 发布订阅 | pubsub |
| XEP-0199 | XMPP Ping | (内建) |
| XEP-0237 | Roster Versioning | (内建) |
| XEP-0280 | 消息碳复制 | message-carbons |
| XEP-0297 | 消息装订 | (内建) |
| XEP-0313 | MAM 消息归档 | urn:xmpp:mam:2 |
| XEP-0352 | 客户端状态指示(CSI) | urn:xmpp:csi:0 |
| XEP-0357 | 推送通知 | (内建) |
| XEP-0369 | MIX 多用户信息服务 | mix |
| XEP-0016 | 隐私列表 | jabber:iq:privacy |
| XEP-0054 | vcard-temp | vcard-temp |
| XEP-0292 | vcard4 | vcard-xep-0292 |
| XEP-0030 | Service Discovery | disco |
| XEP-0130 | 外部服务发现 | ext-disco |
| SASL | 多种 SASL 机制 | urn:ietf:params:xml:ns:xmpp-sasl |
| 其他 | BOSH / WebSocket / Jingle / SOCKS5 bytestreams | 可选 |
4.2 管理能力
- Admin Console Web UI:
http://<host>:8080/rest/,Basic Auth 登录(admin / tigase 是 setup wizard 默认)。 - REST API:
/rest/前缀,Groovy 实现,支持 Api-Key 与 Basic Auth 两种认证,JSON / XML 双格式响应。 - XMPP Ad-Hoc Commands:78 条 Groovy 脚本(
scripts/admin/),按组分类——Users、Statistics、Configuration、Audit Log、Notifications、S2S。通过 Admin Console 的 Ad-Hoc 界面或 REST/rest/adhoc/{component_jid}触发。 - JMX:
jmx.access/jmx.password,可远程监控。 - SNMP:
snmp.acl预留。 - 日志:logback 配置在
etc/logback.xml。
4.3 性能与集群
- 单节点:官方测试 50 万并发用户。
- 集群:通过 DMap(分布式 Map)做 Session/Roster 共享,支持多节点水平扩展。
- 数据库可切 PostgreSQL / MySQL / MongoDB / SQL Server。
- OSGi 模式可选(felix),便于组件热插拔。
4.4 快速开始(最小可用示例)
真实服务器上验证 Tigase 跑起来只需一条命令:
# 启动(systemd 方式,详见安装指南)
systemctl start tigase-server
# 验证端口
ss -tlnp | grep -E '5222|5269|8080'
# 返回:
# LISTEN 0 200 *:5222 *:* users:(("java",...))
# LISTEN 0 100 *:5269 *:* users:(("java",...))
# LISTEN 0 100 *:8080 *:* users:(("java",...))
# 验证进程 + JVM 参数(实测生效)
ps -ef | grep [j]ava
# /usr/bin/java ... -Xms256m -Xmx512m -Xss228k -XX:MaxMetaspaceSize=160m ... tigase.server.XMPPServer
Admin Console 访问:http://<host>:8080/rest/,默认账号 admin@xmpp.example.com / 密码由 setup wizard 设定(示例用 q1w2e3r4)。
五、适用场景与限制
5.1 适用场景
- 企业即时通讯平台:替代 Zimbra / Openfire,支持多租户 VHost、MUC、消息归档、联邦互联。
- 高并发 IM 后端:社交 App / 直播互动 / 在线教育课堂(MUC 大规模聊天室)。
- IoT / 监控指令通道:PubSub 做设备状态发布、AMP 做消息处理链。
- 内部通知中心:搭配 MIX / WebSocket 做统一消息推送。
- 研发协同:团队内部 Jabber 机器人、Bot 平台。
5.2 限制与注意
| 限制 | 说明 | 规避/替代 |
|---|---|---|
| AGPL v3 许可 | 修改后以服务提供必须开源 | 商业许可 / 选用 ejabberd / Prosody |
| 纯 Java 单体 | 内存占用 256MB+(JVM 堆约束下) | 合理设置 -Xmx / MaxRAMPercentage |
| Derby 生产禁用 | 单进程嵌入式,不支持外部连接 | 生产换 PostgreSQL |
| REST API 认证链路较特殊 | Api-Key 头 + Basic Auth 组合,admin Role 匹配 | 生产环境 open_access=false,显式配 Api-Key |
| MIX 是 XEP-0369(新标准) | 客户端支持有限 | 传统 MUC 兼容主流客户端 |
| 文档碎片化 | 官方 wiki 分散,Groovy 文档较少 | 本文档整合了源码与实测 |
六、同类选型对比
| 维度 | Tigase 8.4 | ejabberd 24 | Prosody 0.12 | Openfire 4.8 | Metronome 4 |
|---|---|---|---|---|---|
| 语言 | Java | Erlang | Lua | Java | Rust |
| 许可 | AGPL v3 | GPL v2 | MIT | Apache 2.0 | MIT |
| 并发(官方) | 单节点 50 万 | 单节点 200 万+ | 轻量 1–2 万 | 单节点 5 万 | 轻量 |
| XEP 覆盖 | 全量(含 MIX/PubSub/MAM/AMP) | 全量 | 核心集 | 核心集 + 插件 | 核心集 |
| 虚拟主机 | 原生无限 | 支持 | 支持 | 支持 | 支持 |
| 集群 | DMap 多节点 | Mnesia 集群 | 有限 | 有限 | 有限 |
| REST API | 内置 8080 | 内置 | 插件 | 插件 | 插件 |
| Admin Console | 内置 8080/rest/ | 内置 | 插件 | 内置 Spark | 插件 |
| 数据库 | PG/MySQL/Mongo/SQLServer/Derby | PG/MySQL/Mnesia/SQLite | SQLite/PG/MySQL | PG/MySQL/Embedded | PostgreSQL |
| 维护活跃度 | 高(8.4 系列 2024 持续) | 高(社区+商业) | 中(社区) | 低(社区) | 新(社区) |
| 学习曲线 | 中(Groovy DSL + Java) | 高(Erlang / ejabberdctl) | 低(Lua / cfg) | 中(Java + GUI) | 低 |
| 联邦 S2S | 支持 | 支持 | 支持 | 支持 | 支持 |
| 部署形态 | tar.gz / deb / Docker / OSGi | 源码 / pkg / Docker | 源码 / pkg | 源码 / pkg / Docker | 源码 / Docker |
选型建议
| 条件 | 推荐 |
|---|---|
| 团队 Java 栈,需要高性能 + 集群 + 全 XEP | Tigase |
| 追求极致并发 + 能接受 Erlang 学习曲线 | ejabberd |
| 轻量自用 / 资源紧张 / 偏爱 Lua | Prosody |
| 纯 GUI 运维 / 小团队 / 历史项目 | Openfire(注意维护度下降) |
| 想尝鲜 Rust + 高可靠 | Metronome |
| 闭源商业 SaaS | Tigase 商业许可 或 ejabberd 商业版 |
七、参考链接
- 官方网站:https://tigase.org
- GitHub:https://github.com/tigase/tigase-server
- 发行包下载:https://github.com/tigase/tigase-server/releases
- XMPP RFC 6120 / 6121:https://www.rfc-editor.org/
- XEP 扩展列表:https://xmpp.org/extensions/
- Docker Hub:https://hub.docker.com/r/tigase/tigase-xmpp-server
- Debian/Ubuntu 包:
apt-cache search tigase或官方 apt 源 - 官方 Quick Start:https://docs.tigase.org/tigase-server/8.4.0/Administration_Guide/QuickStart.html