第一步就是选择一个消息的格式。有许多简单消息协议诸如STOMP,MQTT和WAMP。这些都适合应用于网页客户端,并为基本的消息模式提供支持。我们 选择了STOMP,因为它的消息格式是基于HTTP模块化的,同时它也能被广泛的支持。然而,我们的处理模块并没有过分依赖于STOMP,这个处理模块也 能被扩展成支持其他简单协议。
使用STOMP协议能够让我们站在WebSocket的肩膀上。它能够提供一种方法来解析一个消息应该传递给谁,我们又对接收什么样的消息感兴趣。它允许我们像是使用广播消息代理的插件一样使用可用的客户端库文件,比如stomp.js和msg.js。这就是明显的优势。
Spring4提供了STOMP支持。通过两三行的配置,你就可以在网络客户端中把它当做一个轻量级的消息代理。它能够不需要任何服务器代码就自动处理绑 定的事件,并允许控制器方法处理进来的消息和绑定事件。这与如何通过Spring MVC映射HTTP请求到控制器方法是相似的。实际上,一个spring MVC控制器能够被扩展成基于WebSocket的接收STOMP消息的形式。
@Controller
public class GreetingController {
@RequestMapping(value=”/greeting”, method=POST)
public void httpGreet(String text) {
// ...
}
@MessageMapping("/greeting")
public void stompGreet(String text) {
// ...
}
}
使用一个全功能的消息代理
在一个全功能的的消息代理中做一个插件也是很容易的。举个例子,RabbitMQ(或者其他STOMP消息代理),能够被用来处理客户端广播消息的绑定。 在这个场景中,Spring仍然是处于网络客户端连接和交换数据的网络应用层。同时,它也当做一个网关来为RabbitMQ服务,允许消息从应用流向 RabbitMQ,接着转发给绑定此消息的客户端。下面的流程图就是描述这种路径的:
这个路径阐述了运行在多服务器和云环境中的大量应用实例能够通过RabbitMQ服务广播到达所有连接的客户端,而不论此时客户端连接的是哪一个应用实例。此外,也很容易从HTTP请求处理方法广播消息到连接的客户端或者应用的其他部分。
如需更详尽的技术概览说明,请移步spring.io上的M2 blog post,运行股票投资组合样例,或者浏览spring开发频道的在线论坛。我们最近发布了RC1候选版。如果你有一个应用的想法,现在是努力去实现和提供反馈绝佳时机。
如果你恰好在伦敦区域或者很容易到达这里,在11月的14、15日两天,这里有一个spring 交流会。届时会有spring关键工程师代表出席,并会发布最伟大的spring4.0框架和我们支持WebSocket的STOMP协议。
基于 Spring 设计并实现 RESTful Web Services
Spring-3.2.4 + Quartz-2.2.0集成实例