什么是实时通知
实时通知机制是指在系统具备将关键信息和时间即时、主动地传达到用户或者关系的系统中的一种能力,相对于传统的基于轮询或者设定时间间隔的数据拉取方式,实时通知明显降低了信息传递的延迟性,并增强了系统的实时响应能力,从而为用户带来更为流畅的即时交互的体验。
一、技术选择
接下来重点介绍 采用 WebSocket 方式实现实时通知机制。
二、代码示例
WebSocket确实是一种先进的通信协议,它支持在单个TCP连接上实现客户端与服务器之间的全双工通信。在Spring Boot应用程序中,利用Spring WebSocket模块能够方便地集成和实现WebSocket功能,从而提供实时的、双向的数据传输能力。
1.添加相关依赖:
在 Pom.xml 文件中 添加 WebSocket 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.创建 WebSocket 的配置类(消息代理)
package cn.juwatech.config;
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;
/**
* WebSocket配置类,用于配置WebSocket消息代理和端点。
* 通过实现WebSocketMessageBrokerConfigurer接口来定义WebSocket的配置。
*/
@Configuration // 标记这个类为配置类
@EnableWebSocketMessageBroker // 启用WebSocket消息代理支持
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
/**
* 配置消息代理选项。
*
* @param config 消息代理的配置注册表
*/
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// 启用一个简单的内存消息代理,用于将消息携带回客户端,这些消息的目的地以前缀"/topic"开头
config.enableSimpleBroker("/topic");
// 设置应用程序消息的目的地前缀为"/app",这样消息处理的方法就可以映射到"/app"前缀
config.setApplicationDestinationPrefixes("/app");
}
/**
* 注册STOMP协议的端点。
*
* @param registry STOMP端点的注册表
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// 添加一个WebSocket端点"/ws",并启用SockJS支持,以便在不支持WebSocket的浏览器中使用回退选项
registry.addEndpoint("/ws").withSockJS();
}
}
3.创建controller控制器
package cn.juwatech.controller;
import cn.juwatech.dto.Notification; // 引入Notification数据传输对象
import org.springframework.messaging.handler.annotation.MessageMapping; // 用于将接收到的消息映射到特定的处理方法上
import org.springframework.messaging.handler.annotation.SendTo; // 用于指定消息发送到的目的地
import org.springframework.stereotype.Controller; // 标记这个类为Spring MVC的控制器
/**
* 通知控制器,用于处理WebSocket消息并发送通知。
*/
@Controller
public class NotificationController {
/**
* 处理发送到"/sendNotification"的消息。
* 该方法通过@MessageMapping注解映射到WebSocket消息的目的地"/sendNotification"。
* 接收到的消息内容(这里是Notification对象)将作为参数传递给此方法。
* 处理完毕后,使用@SendTo注解将结果发送到"/topic/notification"主题,以便订阅了该主题的客户端能够接收到通知。
*
* @param notification 接收到的通知数据对象
* @return 相同的Notification对象,该对象将被发送到"/topic/notification"主题
*/
@MessageMapping("/sendNotification")
@SendTo("/topic/notification")
public Notification sendNotification(Notification notification) {
// 在这里可以添加对notification的处理逻辑,但在这个例子中,我们直接返回它
return notification;
}
}
NotificationController类定义了一个处理WebSocket消息的方法sendNotification。通过@MessageMapping注解,它指定了该方法将处理发送到/sendNotification路径的消息。接收到消息后,方法内部可以执行一些逻辑处理(在这个例子中,我们直接返回了接收到的Notification对象),然后通过@SendTo注解指定的/topic/notification路径将处理结果(或原始消息)广播给所有订阅了该主题的客户端
原文始发于微信公众号(Java技术前沿):SpringBoot实战:再项目中如何实现实时通知
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/299715.html