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 {@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函数仅显示新鲜的地震信息。

springwebsockets

整个示例与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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...

原标题&#xff1a;MIT警告深度学习正逼近算力极限&#xff0c;突破瓶颈会让人类成为上帝&#xff1f;摩尔定律提出的时候&#xff0c;人们从来没有想到过芯片的算力会有到达极限的一天&#xff0c;至少从来没有想到芯片算力极限会这么快到来。MIT发出警告&#xff1a;算力将探…

推荐40个简单的 jQuery 导航插件和教程【下篇】

在这篇文章中&#xff0c;我为大家收集了40款非常棒的 jQuery 导航插件和教程。导航作为网站重要的组成部分&#xff0c;能够帮助用户找到他们想要的内容&#xff0c;因此导航设计的好坏决定了用户能够在你的网站停留更长的时间&#xff0c;浏览更多的内容。在下面的集合中&…

福大软工 · 第七次作业 - 需求分析报告

【 组长博客链接】 031602428 苏路明 【计划安排】 阶段主要任务时间任务内容1项目选题09.22 - 10.10确定选题内容&#xff0c;收集用户需求&#xff0c;明确定位&#xff0c;竞品分析&#xff0c;选题报告2需求分析10.11 - 11.4梳理需求&#xff0c;输出思维导图&#xff0c;原…

网站页面左右_广州网站优化的技巧是什么?

说到网站优化&#xff0c;大家都不陌生&#xff0c;但首先&#xff0c;我们知道为什么要优化网站吗?我们网站优化是为了改善网站在百度&#xff0c;搜狗等搜索引擎搜索结果排名中的网站页面&#xff0c;以增强搜索引擎的流量。下面拓王朝广州网站优化公司小编针对网站的优化技…

python: 爬取[博海拾贝]图片脚本

练手代码&#xff0c;聊作备忘&#xff1a; # encoding: utf-8 # from __future__ import unicode_literalsimport urllib import urllib2 import re import os import time from threading import Threadclass BhsbSpider(object):_url rhttps://bh.sb/post/category/main/;_…

Java八岁生日快乐!

这是另外一段漫长的旅程&#xff0c;但是昨天&#xff0c;恰好是Java 7发布两年零七个月零十八天之后&#xff0c;我们现在有了可用于生产的构建 Java 8可供下载 &#xff01; 这个新的主要版本包含一些新功能和增强功能&#xff0c;这些功能和增强功能可以提高现有应用程序的…

精心挑选的23款美轮美奂的 jQuery 图片特效插件

jQuery是一个非常优秀的 JavaScript 框架&#xff0c;使用简单灵活&#xff0c;同时还有许多成熟的插件可供选择。其中&#xff0c;jQuery 最令人印象深刻的应用之一就是对图片的处理&#xff0c;它可以让帮助你在你的项目中加入各种精美的图片展示效果。下面向大家分享精心挑选…

arduino定时器函数如何使用_excel如何使用函数公式来查找图片

先看效果&#xff1a;是不是有点意思啊。好&#xff0c;咱们看看如何实现这样的效果。步骤一&#xff1a;准备好图片资料&#xff0c;话说巧媳妇难做无米之炊&#xff0c;没有资料&#xff0c;如何查询&#xff1f;如下图所示&#xff1a;A列是产品名称&#xff0c;B列是对应的…

精美的手机界面设计素材和线框图设计工具推荐

在制作界面原型的时候&#xff0c;如果有现成的界面基础元素可以使用的话&#xff0c;设计师就可以非常快速的完成原型的制作&#xff0c;能够节省大量的时间和精力。在这篇文章&#xff0c;我向大家分享45套非常有用的 UI 和 Wireframe 套件素材包&#xff0c;帮助设计们用于 …

c语言求数列的和_例15:C语言求Fibonacci数列的前30个数

例15&#xff1a;求Fibonacci数列的前30个数。这个数列有以下特点&#xff1a;第1,2两个数为1,1,。从第三个数开始&#xff0c;该数是其前两个数之和。&#xff08;斐波那契不死神兔&#xff09;解题思路&#xff1a;从前两个月的兔子数可以推出第3个月的兔子数。设第1个月的兔…

哈工大未来计算机院士,中国双一流大学拥有院士校友数排名,这是真实力!哈工大依然很强...

原标题&#xff1a;中国双一流大学拥有院士校友数排名&#xff0c;这是真实力&#xff01;哈工大依然很强校友是一个神奇的资源&#xff0c;就是曾经在同一个学校、大学、研究院(所)进行学习、工作和进修的人&#xff0c;就称为校友&#xff0c;以学校为标准&#xff0c;并不以…

GT sport赛道详解 - Dragon Trail | 龙之径

参考&#xff1a;GT sport所有赛道简介 今天的心情变化挺大&#xff0c;从绝望放弃到豁然开朗。 前言&#xff1a;GT sport有个排位赛&#xff0c;是每位sim赛车手提升自己等级的唯一途径&#xff0c;其中一个排位赛就是龙之径II&#xff08;逆时针跑&#xff09;&#xff0c;我…

优秀网页设计:带给你灵感的联系页面设计

在设计网站的时候&#xff0c;我们需要考虑到各个方面&#xff0c;从页眉到脚&#xff0c;从着陆页&#xff08;landing page&#xff09;到关于页&#xff08;about us page&#xff09;&#xff0c;还有联系页面&#xff08;contact page&#xff09;都要考虑。联系页面是网站…

前端项目难点及解决方法_预埋件施工重点难点的解决方法

点击箭头处“蓝色字”&#xff0c;关注我们哦&#xff01;&#xff01;关于施工重难点的问题&#xff0c;可根据主体结构施工情况&#xff0c;想从根本上解决几大重难点&#xff0c;必须严格按照设计图纸及规范要求放线定位&#xff0c;将预埋件施工精度控制合格率&#xff0c;…

视差滚动(Parallax Scrolling)技术在网页中应用的精美案例

视差滚动&#xff08;Parallax Scrolling&#xff09;是一种独特的网页内容表现形式&#xff0c;其基本原理是让多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来出色的视觉体验。作为今年网页设计的热点趋势&#xff0c;越来越多的网站应用了这项技术…

用Java可外部化

在理解Externalizable接口之前&#xff0c;您需要了解序列化。您可以在java中的序列化上阅读有关序列化的更多信息。 Java提供一种称为序列化的机制&#xff0c;以按字节顺序或字节顺序持久化Java对象&#xff0c;其中包括对象的数据以及有关对象的类型和存储在对象中的数据类…

批量删除html网页,批量删除.html · panghuamama/Clearly Local - Gitee.com

&#xfeff;批量删除$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; };…

推荐30个新鲜出炉的精美 jQuery 效果

jQuery 是最流行和使用最广泛的 JavaScript 框架&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画以及Ajax交互&#xff0c;帮助Web开发人员更快速的实现各种精美的界面效果。jQuery 的易扩展性吸引了来自全球的开发者来共同编写 jQuery 插件&#xff0c…

会计专业计算机技能大赛,会计技能大赛策划

会计技能大赛策划一&#xff0e;活动背景会计是一个基于理论和实践相结合的学科&#xff0c;对于经管学院&#xff0c;会计专业是一个新创建的专业&#xff0c;缺少相应的会计实践。作为会计专业的学生&#xff0c;在不断学习理论的同时&#xff0c;我们更应该加强实践操作能力…

vue自定义指令clickoutside扩展--多个元素的并集作为inside

都是个人理解&#xff0c;如果发现错误&#xff0c;恳请大家批评指正&#xff0c;谢谢。还有我说的会比较啰嗦&#xff0c;因为是以自身菜鸡水平的视角来记录学习理解的过程&#xff0c;见谅。 1.前言 产品使用vueelement作为前端框架。在功能开发过程中&#xff0c;难免遇到使…