当前位置: 首页 > news >正文

Spring STOMP-开启STOMP

通过Spring框架的spring-messaging和spring-websocket模块,提供了对WebSocket上STOMP的支持。一但你添加了这些依赖项,你就可以像下面这个示例一样,通过WebSocket公开一个STOMP端点:

import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/portfolio"); // #1}@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.setApplicationDestinationPrefixes("/app"); // #2config.enableSimpleBroker("/topic", "/queue"); // #3}
}
  1. /portfolio是WebSocket(或SockJS)客户端用于WebSocket握手的HTTP URL。
  2. destination请求头的值以/app开头的STOMP消息将被路由到@Controller类中@MessageMapping 注释的方法。
  3. 使用内置的消息代理进行订阅和广播,并将destination请求头的值以/topic/queue开头的消息路由到消息代理。

下面这个示例通过XML来配置endpoint:

<beans xmlns="<http://www.springframework.org/schema/beans>"xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"xmlns:websocket="<http://www.springframework.org/schema/websocket>"xsi:schemaLocation="<http://www.springframework.org/schema/beans><https://www.springframework.org/schema/beans/spring-beans.xsd><http://www.springframework.org/schema/websocket><https://www.springframework.org/schema/websocket/spring-websocket.xsd>"><websocket:message-broker application-destination-prefix="/app"><websocket:stomp-endpoint path="/portfolio" /><websocket:simple-broker prefix="/topic, /queue"/></websocket:message-broker></beans>

对于本地内存消息代理,/topic和/queue前缀没有任何特殊含义。它们只是一种惯例,用于区分发布-订阅与点对点消息传递(即,许多订阅者与一个消费者)。当你使用外部代理时,请查看相应代理的STOMP介绍页面,去了解它支持STOMP哪种类型的destinations和前缀。

如果要从浏览器连接服务器,对于STOMP协议,你可以使用[stomp-js/stompjs](<https://github.com/stomp-js/stompjs>) 库,这是最活跃的JavaScript库。

以下示例代码是基于它:

const stompClient = new StompJs.Client({brokerURL: 'ws://domain.com/portfolio',onConnect: () => {*// ...*}});

或者,如果您通过SockJS连接,您可以在服务器端使用registry.addEndpoint("/portfolio").withSockJS()启用SockJS Fallback,并在JavaScript端,按照这些指令操作。

请注意,前面示例中的stompClient不需要指定loginpasscode 消息头。即使这样做了,它们也会在服务器端被忽略(或者更确切地说,被覆盖)。有关身份验证的更多信息,请参见连接到代理和身份验证。

有关更多示例代码,请参见:

  • Using WebSocket to build an interactive web application — a getting started guide.
  • Stock Portfolio — a sample application.
  • 使用WebSocket构建交互式Web应用程序 — 入门指南。
  • 股票投资组合 — 示例应用程序。

http://www.lryc.cn/news/346690.html

相关文章:

  • Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)
  • 《Python编程从入门到实践》day25
  • Unity 性能优化之光照优化(七)
  • C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形
  • AI办公自动化-用kimi批量重命名Word文档
  • Golang 并发 Mutex 互斥锁的使用
  • 20232906 2023-2024-2 《网络与系统攻防技术》第九次作业
  • 常见的十二种软件架构
  • 数据库出现死锁的解决方法参考
  • HCIP-Datacom-ARST自选题库_01_防火墙【6道题】
  • 力扣/leetcode383.比特位记数
  • react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)
  • Excel 分组汇总后删除明细
  • docker runc升级1.1.12
  • C++接口:构建模块化与可扩展的软件架构
  • 【讲解下目标追踪】
  • 实时Linux对EtherCAT工业自动化协议的支持
  • ViLT 浅析
  • 7-117 死亡隧道
  • java数据结构与算法(链表归并排序)
  • 最新网页版USB转串口芯片CH340中文规格书手册(20240511)
  • 关于 MongoDB 数据库基本操作的详细介绍
  • 【网络基础】网络层 之 IP协议与分片、网段划分、IP地址分类、子网掩码与路由
  • C语言实现猜数字小游戏
  • iOS Failed to create provisioning profile.
  • 122. Kafka问题与解决实践
  • Pytorch常用的函数(九)torch.gather()用法
  • 用爬虫解决问题
  • 机器学习-有监督学习
  • 【详细介绍下Visual Studio】