自 2003 年左右以来,我一直在各种软件系统中使用 JMS 消息传递。我有一个 Web 应用程序,其中客户端实际上是 JMS 主题订阅者。仅仅通过将消息发布到主题中的行为,消息就会被服务器推送到所有订阅的 Web 客户端。
Web 客户端是基于 Flex 的。我们的中间层堆栈包括:
- 爪哇 6
- 雄猫 6
- BlazeDS
- 弹簧框架
- ActiveMQ(JMS 消息代理)
BlazeDS 能够配置为连接 JMS 的桥梁。它是一个 Tomcat servlet,它响应 Flex 客户端远程调用,但也可以在其配置的 JMS 主题中出现新消息时向客户端推送消息。
BlazeDS 实现了 Comet 模式来进行服务器端消息推送:
异步 HTTP 和 Comet 架构介绍异步、非阻塞 HTTP 编程
Farata Systems 宣布他们已修改 BlazeDS 以使用 Jetty 延续方法来实施彗星模式。这可以针对单个物理服务器扩展到数千个 Comet 连接。
Farata Systems 借助 Adobe BlazeDS 实现性能突破
我们正在等待 Adobe 自己在 BlazeDS 中实现对 Servlet 3.0 的支持,因为基本上我们非常热衷于组合使用 Tomcat 和 Spring。
实现大规模可扩展 Comet 模式的技术的关键是将 Java NIO HTTP 侦听器与线程池结合使用(例如 Java 5 并发库中的 Executor 类)。Servlet 3.0 是一个异步事件驱动的 servlet 模型,可以与这样的 HTTP 侦听器绑定在一起。然后可以针对单个物理服务器维持数千个(数字如 10,000 到 20,000 个)并发 Comet 连接。
尽管在我们的案例中,我们使用 Adobe Flex 技术将 Web 客户端转变为事件驱动的消息订阅者,但对于任何通用 AJAX Web 应用程序都可以这样做。在 AJAX 圈子中,进行服务器端消息推送的技术通常被称为Reverse AJAX。您可能已经发现 Comet 是文字游戏,就像 Ajax 的对应物(都是家庭清洁工)。不过,对我们来说,好事是我们只需将我们的部分连接在一起,然后我们就可以走了。通用 AJAX 网络编码器将有更多的编程工作要做。(不过,即使是通用的网络应用程序也可以与 BlazeDS 一起使用 - 它对 BlazeDS 能够执行的 AMF 编组没有任何用处。)
最后,Adobe 和 SpringSource 正在合作建立 BlazeDS 与 Spring-Framework 的更顺畅、开箱即用的集成:
Adobe 与 SpringSource 合作以增强 Flash 和 SpringSource 平台之间的集成