Websockets与Spring 4

我将整个厨盆放入一个小型Web应用程序中,该应用程序是我在帖子中开发的一部分-Spring Boot,Spring Integration,RabbitMQ,最后是该帖子的主题,即Spring MVC和Spring 4中的Websocket支持。

实时地震清单应用

最终的应用程序将列出世界各地发生的地震,并按以下方式实时更新(如果可以将一分钟视为足够实时的话):

屏幕截图2014年3月8日上午12:13

存储地震信息

该应用程序的第一部分是每分钟从USGS地震危害计划中轮询数据并进行存储。 我选择将其直接存储到RabbitMQ主题中,以后将用于Websockets集成。 Spring Integration非常适合此类功能的需求-仅使用配置,我就可以轮询USGS服务,以提供此信息json提要,并将其写入RabbitMQ主题。 这是这样的流程:

地震

下面是原始的完整Spring集成流程,这里缺少的唯一代码是Rabbitmq的配置,该配置是另一个配置文件的一部分:

<import resource="rabbit-context.xml"/>
 <int:inbound-channel-adapter channel="quakeinfotrigger" expression="''">
  <int:poller fixed-delay="60000"></int:poller>
 </int:inbound-channel-adapter>

 <int:channel id="quakeinfo"/>

 <int:channel id="quakeinfotrigger"></int:channel>

 <int-http:outbound-gateway id="quakerHttpGateway"
     request-channel="quakeinfotrigger"
     url="http://earthquake.usgs.gov/earthquakes/feed/geojson/all/hour"
     http-method="GET"
     expected-response-type="java.lang.String"
     charset="UTF-8"
     reply-channel="quakeinfo">
 </int-http:outbound-gateway>

 <int-amqp:outbound-channel-adapter amqp-template="amqpTemplate" channel="quakeinfo" />

因此,现在我有了一个流程来收集地震信息,并将其存储到一个名为“ amq.topic”的RabbitMQ主题中,并在内部将“ quakes.all”的路由密钥插入每个地震信息中,下一步是为了弄清楚如何在浏览器应用程序上动态显示此信息。

呈现地震信息

Spring Framework 4.0+通过框架中内置的基于Websocket的消息传递支持,可以轻松开发应用程序的Web部件。 Spring 4.0使用STOMP作为原始websocket的高级协议–我提供了一些参考,这些参考使Websocket支持的细节更加清晰。

本质上,Spring将充当浏览器的中介,以订阅RabbitMQ地震主题并在流入新地震信息时显示实时信息,这些参考文献中的图表很好地总结了这一点:

功能齐全的消息代理

外部代理对Spring 4 Websockets的支持要求代理支持STOMP协议,该协议易于使用RabbitMQ启用。 有了RabbitMQ中的STOMP支持,Spring MVC配置如下所示:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

 @Override
 public void configureMessageBroker(MessageBrokerRegistry config) {
  config.enableStompBrokerRelay("/topic/");
  config.setApplicationDestinationPrefixes("/app");
 }

 @Override
 public void registerStompEndpoints(StompEndpointRegistry registry) {
  registry.addEndpoint("/quakesep").withSockJS();
 }
}
  • “ / topic”被注册为端点,Spring充当了RabbitMQ STOMP支持的网关
  • “ / app”是应用程序前缀,Spring MVC将在该应用程序前缀中侦听在STOMP消息帧中编码的浏览器请求,在这种特定情况下,我没有从UI收到任何请求,因此未真正使用此端点
  • “ / quakesep”是websocket端点

这就是服务器端所需的全部!

现在,为了让客户订阅RabbitMQ主题中的消息,我已经按照其中一篇参考文章中的示例实现了该消息。 该示例使用sockjs client ,这是一个JavaScript库,用于在浏览器中进行websocket仿真。

这是连接到websocket端点“ / quakesep”并订阅“ /topic/quakes.all”端点的javascript代码的样子。 这会在内部为该Websocket会话向RabbitMQ注册一个临时队列,并将AMQP路由密钥“ quakes.all”映射到该临时队列,实质上是将所有地震消息发送到该会话的临时队列。

function connect() {
      var socket = new SockJS('/quakesep');
      stompClient = Stomp.over(socket);
      stompClient.connect({}, function(frame) {
          console.log('Connected: ' + frame);
          stompClient.subscribe('/topic/quakes.all', function(message){
              showQuakeInfo(message.body);
          });
      });
  }

如果RabbitMQ提供了上述地震信息,则上述showQuakeInfo函数仅显示新的地震信息。

springwebsockets

整个示例与Spring Boot结合在一起,这确保了pom文件中声明的依赖关系保持在最低限度,启动应用程序的配置量非常小-本质上是我在上面显示的WebSocketConfig代码!

资源资源

  1. Spring Framework中的Websocket架构
  2. 使用Spring Framework构建基于Websocket的应用程序的网络研讨会
参考: all和其他博客中来自JCG合作伙伴Biju Kunjummen的Spring 4 Websockets

翻译自: https://www.javacodegeeks.com/2014/03/websockets-with-spring-4.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值