开源Titan:一个用SpringBoot实现的轻量级消息分发平台


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 多种传输方式。
- 统一客户端 APITitanClient 屏蔽了底层实现差异,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