Tigase 介绍与选型指南

Tigase 8.4.3 介绍与选型:基于 Java 的开源 XMPP/Jabber 服务器,覆盖架构、功能、性能、同类对比与选型建议,已在 Ubuntu 22.04 实测拉起(systemd + Derby + REST API + JVM 256–512MB 约束)。

TigaseTigaseJabberRESTXEPMUCPubSub即时通讯2026/10/27

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 上游最新稳定)
JDKOpenJDK 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、MetronomeIETF 标准,扩展靠 XEP 生态,联邦互联(S2S)
Matrix异步 JSON over WebSocketSynapse、Dendrite联邦、端到端加密、客户端生态强
MQTT发布/订阅EMQX、MosquittoIoT 轻量,无实时会话
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.jarOSGi / Felix 启动器启用 OSGI=true 时使用
tigase-http-api-jetty.jar + tigase-http-api.jarHTTP Admin + REST APIJetty 内嵌,端口 8080
tigase-web-ui.warAdmin Console Web UI/rest/ 首页即入口
tigase-muc.jar多用户会议(MUC,XEP-0045)聊天室
tigase-pubsub.jarPubSub(XEP-0060)发布订阅节点
tigase-message-archiving.jar消息归档(XEP-0313 MAM)
tigase-stun.jar + tigase-spam.jarSTUN/TURN + 反垃圾
tigase-mongodb.jarMongoDB 用户库后端可选数据库
mysql-connector-java.jar / postgresql.jar / mssql-jdbc.jarJDBC 驱动按数据库选
derby.jarDerby 内置数据库驱动默认
以及 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开发/测试,零依赖
PostgreSQLjars/postgresql.jardatabase/postgresql-*.sql生产首选
MySQL / MariaDBjars/mysql-connector-java.jardatabase/mysql-*.sql生产
SQL Serverjars/mssql-jdbc.jardatabase/sqlserver-*.sql企业内网
MongoDBjars/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-0079AMP 高级消息处理amp
XEP-0045MUC 多用户会议muc
XEP-0060PubSub 发布订阅pubsub
XEP-0199XMPP Ping(内建)
XEP-0237Roster Versioning(内建)
XEP-0280消息碳复制message-carbons
XEP-0297消息装订(内建)
XEP-0313MAM 消息归档urn:xmpp:mam:2
XEP-0352客户端状态指示(CSI)urn:xmpp:csi:0
XEP-0357推送通知(内建)
XEP-0369MIX 多用户信息服务mix
XEP-0016隐私列表jabber:iq:privacy
XEP-0054vcard-tempvcard-temp
XEP-0292vcard4vcard-xep-0292
XEP-0030Service Discoverydisco
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 适用场景

  1. 企业即时通讯平台:替代 Zimbra / Openfire,支持多租户 VHost、MUC、消息归档、联邦互联。
  2. 高并发 IM 后端:社交 App / 直播互动 / 在线教育课堂(MUC 大规模聊天室)。
  3. IoT / 监控指令通道:PubSub 做设备状态发布、AMP 做消息处理链。
  4. 内部通知中心:搭配 MIX / WebSocket 做统一消息推送。
  5. 研发协同:团队内部 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.4ejabberd 24Prosody 0.12Openfire 4.8Metronome 4
语言JavaErlangLuaJavaRust
许可AGPL v3GPL v2MITApache 2.0MIT
并发(官方)单节点 50 万单节点 200 万+轻量 1–2 万单节点 5 万轻量
XEP 覆盖全量(含 MIX/PubSub/MAM/AMP)全量核心集核心集 + 插件核心集
虚拟主机原生无限支持支持支持支持
集群DMap 多节点Mnesia 集群有限有限有限
REST API内置 8080内置插件插件插件
Admin Console内置 8080/rest/内置插件内置 Spark插件
数据库PG/MySQL/Mongo/SQLServer/DerbyPG/MySQL/Mnesia/SQLiteSQLite/PG/MySQLPG/MySQL/EmbeddedPostgreSQL
维护活跃度高(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 栈,需要高性能 + 集群 + 全 XEPTigase
追求极致并发 + 能接受 Erlang 学习曲线ejabberd
轻量自用 / 资源紧张 / 偏爱 LuaProsody
纯 GUI 运维 / 小团队 / 历史项目Openfire(注意维护度下降)
想尝鲜 Rust + 高可靠Metronome
闭源商业 SaaSTigase 商业许可 或 ejabberd 商业版

七、参考链接