Titan是一个轻量级的消息分发运行时(message dispatch runtime),基于 STOMP 协议提供实时的消息发布/订阅能力。它由 traffic-hunter 团队开发,采用 MIT 许可证开源。
STOMP协议的全称是Streaming Text Oriented Messaging Protocol,翻译过来叫流文本定向消息协议。这玩意儿设计出来就是为了让消息传递变得跟发短信一样简单。它的帧格式就三部分:命令、头部、正文,用NULL字符结束,连个XML都不带解析的。2006年OpenEJB团队发布STOMP的时候,目标就一个——让Java应用能有套简单高效的异步通信机制。但奇怪的是,这么多年过去了,市面上支持STOMP的轻量级服务端少得可怜。
Titan干的事特别狠——它直接把STOMP服务端本身做成了一个可以独立运行的JAR包。你不需要任何外部依赖,不需要装Erlang,不需要配MySQL,连个Redis都不用挂。一个java -jar命令,服务就起来了。这就是Titan的第一个反常识点:消息中间件可以不需要“中间件”三个字所暗示的那一堆基础设施。
项目定位
Titan 不是 Kafka 或 RabbitMQ 这类持久化、集群化的重量级消息中间件替代品。它的适用场景是:
- 实时通知推送
- 聊天类消息系统
- 遥测数据的扇出分发
- 需要快速引入实时消息能力但不想搭建复杂基础设施的场景
项目作者也明确表示,Titan 目前不提供持久化存储、集群化和跨服务端恢复的保证,仍在持续演进中。
为什么选择Titan ?
- 无需庞大的代理服务器堆栈即可使用 STOMP。 运行独立的 JAR 文件,并通过 TCP 或 WebSocket 连接。
- 一个客户端 API。TitanClient TitanClient 生实现和 Vert.x 实现隐藏在同一个消息传递契约之后。
- 连接恢复。 客户端在意外断开连接后重新连接,并恢复已激活的订阅。
- Spring 原生用法。 使用 TitanTemplate 发送,并使用……接收。 @TitanListener 。
- 内置可视性。可通过本地监控 API 或终端 CLI 检查 JVM 和目标队列状态。
核心特性
- STOMP 协议支持:基于 STOMP 1.2 协议,支持 TCP、WebSocket 和 TLS 多种传输方式。
- 统一客户端 API:TitanClient 屏蔽了底层实现差异,Native 和 Vert.x 两种实现共用同一套消息接口。
- 自动连接恢复:客户端在意外断连后会自动重连,并恢复之前的订阅关系。
- Spring Boot 集成:通过 TitanTemplate 发送消息,使用 @TitanListener 注解接收消息。
- 内置监控:提供本地 HTTP 监控 API 和命令行 CLI 工具,可查看 JVM 状态、队列积压等信息。
- Fanout 扇出分发:支持将一条消息同时投递给多个订阅者。
快速开始
环境要求:JDK 21 或更高版本。
1. 下载 Server JAR:
bash
curl -LO https://github.com/traffic-hunter/titan/releases/download/0.8.0/titan-server-0.8.0.jar
2. 创建配置文件 titan-env.yml:
yaml
titan:
monitor:
enabled: true
host: 127.0.0.1
port: 7777
servers:
- name: stomp-dispatch
protocol: stomp
host: 0.0.0.0
port: 61613
protocol-options:
supported-versions: "1.2"
fanout-mode: "virtual"
3. 启动服务:
bash
java -Dtitan.environment.path=./titan-env.yml -jar titan-server-0.8.0.jar
4. 验证运行状态:
bash
curl http://localhost:7777/titan/monitor/health
curl http://localhost:7777/titan/monitor/snapshot
监控与运维
- HTTP 监控端点:健康检查 /titan/monitor/health、快照 /titan/monitor/snapshot
- 终端 CLI 工具:预编译的 titan-cli 支持查看队列状态等操作
- 本地监控:聚焦于 JVM、通道和目的地队列的可视化
技术栈与许可证
- 主要语言:Java
- CLI 工具:Go 1.22+
- 构建工具:Gradle
- 许可证:MIT License