SpringBoot实战:再项目中如何实现实时通知

什么是实时通知

实时通知机制是指在系统具备将关键信息和时间即时、主动地传达到用户或者关系的系统中的一种能力,相对于传统的基于轮询或者设定时间间隔的数据拉取方式,实时通知明显降低了信息传递的延迟性,并增强了系统的实时响应能力,从而为用户带来更为流畅的即时交互的体验。


一、技术选择

SpringBoot 中,有多种技术可以实现实时通知,具体如下:

  • WebSocket:提供了双向的通信能力,适用于低延迟、高时效性的应用场景。

  • Server-Sent Events: 是一种运行服务器端单向为客户端推送数据的方式,适用于单向的实时通知场景。

  • Webhooks:通过 HTTP 回调来实现消息通知的方式,适用于接收外部系统的时间推送。

  • 消息队列方式:例如 RabbitMQKafka等消息中间件,用于异步传递事件通知。

接下来重点介绍 采用  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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!