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 {

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/portfolio"); // #1
	}

	@Override
	public void configureMessageBroker(MessageBrokerRegistry config) {
		config.setApplicationDestinationPrefixes("/app"); // #2
		config.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 消息头。即使这样做了,它们也会在服务器端被忽略(或者更确切地说,被覆盖)。有关身份验证的更多信息,请参见连接到代理身份验证

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李昂的数字之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值