欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > SpringBoot简单使用Stomp

SpringBoot简单使用Stomp

2025/5/2 16:03:29 来源:https://blog.csdn.net/qq_45153375/article/details/144698114  浏览:    关键词:SpringBoot简单使用Stomp

下面是一个使用 STOMP 协议的 Spring Boot 应用示例,包含三个 WebSocket 端点。每个端点都有特定的功能。代码中包含中文注释,帮助你理解每个部分的作用。

1. 添加依赖

首先,确保在 pom.xml 中添加了 WebSocket 和 Spring Messaging 的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 配置 WebSocket 和 STOMP

创建一个配置类来注册多个 WebSocket 端点:

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {// 配置消息代理,启用简单代理,支持/topic和/queueconfig.enableSimpleBroker("/topic", "/queue");// 设置应用程序目的地前缀config.setApplicationDestinationPrefixes("/app");}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {// 注册三个不同的WebSocket端点,支持SockJSregistry.addEndpoint("/ws-endpoint1").withSockJS();registry.addEndpoint("/ws-endpoint2").withSockJS();registry.addEndpoint("/ws-endpoint3").withSockJS();}
}

3. 创建控制器

创建一个控制器来处理不同的消息:

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;@Controller
public class MessageController {// 处理来自客户端的消息,路径为/app/message1@MessageMapping("/message1")// 将处理结果发送到/topic/messages1@SendTo("/topic/messages1")public String handleMessage1(String message) {return "Endpoint1: " + message;}// 处理来自客户端的消息,路径为/app/message2@MessageMapping("/message2")// 将处理结果发送到/topic/messages2@SendTo("/topic/messages2")public String handleMessage2(String message) {return "Endpoint2: " + message;}// 处理来自客户端的消息,路径为/app/message3@MessageMapping("/message3")// 将处理结果发送到/topic/messages3@SendTo("/topic/messages3")public String handleMessage3(String message) {return "Endpoint3: " + message;}
}

4. 客户端示例

在客户端(例如,使用 JavaScript)中,连接到不同的 WebSocket 端点:

function connectToEndpoint(endpoint, messagePath, subscriptionPath) {const socket = new SockJS(endpoint);const stompClient = Stomp.over(socket);stompClient.connect({}, function (frame) {console.log('已连接到 ' + endpoint + ': ' + frame);// 订阅主题stompClient.subscribe(subscriptionPath, function (message) {console.log('收到消息: ' + message.body);});// 发送消息到服务器stompClient.send(messagePath, {}, "来自 " + endpoint + " 的消息");});
}// 连接到每个端点
connectToEndpoint('/ws-endpoint1', '/app/message1', '/topic/messages1');
connectToEndpoint('/ws-endpoint2', '/app/message2', '/topic/messages2');
connectToEndpoint('/ws-endpoint3', '/app/message3', '/topic/messages3');

代码解释

  • WebSocketConfig:配置类用于注册 WebSocket 端点和配置消息代理。

    • enableSimpleBroker("/topic", "/queue"):启用简单的内存消息代理,支持 /topic/queue 作为消息目的地。
    • setApplicationDestinationPrefixes("/app"):设置应用程序目的地前缀,客户端发送的消息路径应以 /app 开头。
    • registerStompEndpoints:注册三个 WebSocket 端点,支持 SockJS。
  • MessageController:控制器类处理来自客户端的消息。

    • @MessageMapping:映射客户端发送的消息路径。
    • @SendTo:指定处理后的消息发送到的目的地。
  • 客户端代码:使用 SockJS 和 STOMP.js 连接到 WebSocket 端点,订阅主题并发送消息。

通过这种方式,你可以在 Spring Boot 中配置多个 WebSocket 端点,并处理来自不同端点的消息。每个端点和消息路径都有特定的功能,便于扩展和管理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词