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

实时地震清单应用

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

存储地震信息

该应用程序的第一部分是每分钟从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 {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableStompBrokerRelay("/topic/");config.setApplicationDestinationPrefixes("/app");}@Overridepublic 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函数仅显示新鲜的地震信息。

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

  • 我在github上有可用的代码

资源资源

  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

Websockets与Spring 4相关推荐

  1. 《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA H

    2019独角兽企业重金招聘Python工程师标准>>> <Java Web高级编程--涵盖WebSockets.Spring Framework.JPA Hibernate和S ...

  2. 响应式Spring Cloud初探

    响应式Spring Cloud初探 分类:工程 原文链接:The Road to Reactive Spring Cloud 作者:  JOSH LONG 译者: helloworldtang 日期: ...

  3. Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway

    转载自  Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使 ...

  4. springcloud(十一):服务网关 Spring Cloud GateWay 入门

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  5. This Week in Spring - July 2nd, 2013

    Engineering Josh Long July 03, 2013 Welcome to another installment of This Week in Spring! As usual, ...

  6. jhipster创建项目问答汇总_[恭喜JHipster社区喜提 VueJS !]

    在中国的狗年农历腊月廿三 也就是我国过小年的时候, Twitter上传来喜讯 jhipster-vuejs 团队在NPM上发布了 我们偏Vue系全栈程序员 "翘臀以盼" 的 JHi ...

  7. 周 7 福利日:中奖名单公布

    前言 应了今天的推文标题,我决定每周 7 定为福利日. 用订阅号流量主.广告的收入给大家买点书.服务器等福利, 通过评论点赞.抽奖等方式发给大家. 上周末举行的评论送书活动:已经结束.获奖的用户可以在 ...

  8. 2.使用Gateway实现token校验

    原文地址(强烈建议看原文):https://www.cnblogs.com/dennyzhangdd/p/12132612.html 目录 引子 Gateway设计思想 官网设计 我们的使用 Gate ...

  9. 刷完这套微服务+多线程+源码+分布式+调优试题,年薪50w还会是问题吗

    文章目录 前言 正文 一.Java基础(JVM.设计模式.容器.反射.对象拷贝.Java Web.异常.网络) 二.Java多线程与并发编程(多线程.JMM.HashMap) 三.开源框架(Sprin ...

最新文章

  1. 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析
  2. 神秘使者到 Java 帝国传道协程,竟被轰了出去!
  3. Rxjava 优雅的实现短信验证码发送
  4. 公交车座椅上有个洞,竟是为了…很多人都不知道
  5. linux读取内存文件,linux – 使用模块读取内核内存
  6. 使用 Packer、Ansible 和 Terraform 构建不可变的基础设施Devops工具链
  7. Markdown编辑器基本语法
  8. AI部署从EonStor GSi存储解决方案开始
  9. 后RCNN时代的物体检测及实例分割进展
  10. Python-Numpy语法总结-数组的创建
  11. 编译环境 Golang开发环境 vscode+git
  12. 空间战场态势感知系统
  13. 解决AD13不能复制原理图的问题
  14. java 同比环比_数据相关概念同比,环比
  15. 计算机网络:循环冗余码CRC
  16. 世界著名大学校训(中英文版)
  17. Phaser学习笔记
  18. vue使用pdf.js预览pdf文件加水印,下载pdf文件
  19. NoSQL 与大数据
  20. Push rejected: Push to origin/master was rejected--git推送项目到远程服务器

热门文章

  1. 时代银通笔试20181023
  2. Oracle 分页语句解释,oracle 分页语句
  3. 做一个完整的Java Web项目需要掌握的技能
  4. centos上安装jdk
  5. ReviewForJob(2)算法分析
  6. HDU2612(BFS算法)
  7. 设计模式 工厂方法_工厂方法设计模式
  8. docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase
  9. 接口中默认方法和静态方法_接口中的默认方法和静态方法
  10. java 多线程变量可见性_Java多线程:易变变量,事前关联和内存一致性