Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用

news2025/1/12 3:59:33

Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用

SimpMessagingTemplate是Spring Framework中的一个类,用于向WebSocket客户端发送消息。在Spring Boot应用程序中,可以使用SimpMessagingTemplate来实现WebSocket通信的消息发送功能。本文将介绍SimpMessagingTemplate的原理和使用方法。

在这里插入图片描述

SimpMessagingTemplate是什么

SimpMessagingTemplate是Spring Framework中的一个类,用于向WebSocket客户端发送消息。在Spring Boot应用程序中,可以使用SimpMessagingTemplate来实现WebSocket通信的消息发送功能。

SimpMessagingTemplate类提供了多种方法来向WebSocket客户端发送消息,支持多种消息类型,例如文本消息、二进制消息、对象消息等。

原理

SimpMessagingTemplate的原理是通过WebSocket消息代理来向WebSocket客户端发送消息。在启用WebSocket消息代理之后,可以使用SimpMessagingTemplate类来向WebSocket客户端发送消息。

SimpMessagingTemplate类中的sendMessage方法用于向WebSocket客户端发送消息,该方法会将消息发送到WebSocket消息代理,由WebSocket消息代理负责将消息转发给目标WebSocket客户端。

在Spring Boot中,可以通过注入SimpMessagingTemplate类的实例来向WebSocket客户端发送消息。具体代码如下:

@RestController
public class GreetingController {
    @Autowired
    private SimpMessagingTemplate messagingTemplate;

    @MessageMapping("/hello")
    public void greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000); // simulated delay
        Greeting greeting = new Greeting("Hello, " + message.getName() + "!");
        messagingTemplate.convertAndSend("/topic/greetings", greeting);
    }
}

在上述代码中,我们在GreetingController类中注入了SimpMessagingTemplate类的实例messagingTemplate。在greeting方法中,我们通过messagingTemplate.convertAndSend方法向"/topic/greetings"地址发送一条Greeting类型的消息。

如何使用

下面我们来演示如何使用SimpMessagingTemplate类来向WebSocket客户端发送消息。

步骤1:添加依赖

在使用SimpMessagingTemplate之前,需要在项目中添加以下依赖:

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

步骤2:定义WebSocket配置类

在项目中定义一个WebSocket配置类,用于配置WebSocket消息代理的相关参数。具体代码如下:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();
    }
}

该配置类中使用@EnableWebSocketMessageBroker注解来启用WebSocket消息代理功能,使用configureMessageBroker方法来配置消息代理的相关参数,使用registerStompEndpoints方法来注册Stomp协议的WebSocket端点。

在configureMessageBroker方法中,我们使用enableSimpleBroker方法来配置消息代理的地址,这里我们将消息代理地址设置为"/topic",表示所有以"/topic"开头的消息都会被路由到消息代理上。setApplicationDestinationPrefixes方法用于设置应用程序的目的地前缀,这里我们将其设置为"/app",表示所有以"/app"开头的消息都会被路由到控制器上。

在registerStompEndpoints方法中,我们使用addEndpoint方法来添加WebSocket端点,这里我们将WebSocket端点设置为"/ws",并使用withSockJS方法启用SockJS支持,以便在不支持WebSocket的浏览器上进行通信。

步骤3:定义WebSocket控制器

在项目中定义一个WebSocket控制器,用于处理WebSocket消息。具体代码如下:

@Controller
public class WebSocketController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, "+ message.getName() + "!");
    }
}

在上述代码中,我们使用@Controller注解来标识该类为WebSocket控制器,使用@MessageMapping注解来映射WebSocket请求地址"/hello",使用@SendTo注解来指定发送消息的地址。在greeting方法中,我们处理接收到的HelloMessage类型的消息,并返回一个Greeting类型的消息。

步骤4:定义消息类型

在项目中定义消息类型,用于在WebSocket客户端和服务器之间传递消息。具体代码如下:

public class HelloMessage {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Greeting {
    private String content;

    public Greeting(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

在上述代码中,我们定义了HelloMessage和Greeting两种消息类型,分别用于表示客户端发送的消息和服务器返回的消息。

步骤5:使用SimpMessagingTemplate发送消息

在需要向WebSocket客户端发送消息的地方注入SimpMessagingTemplate类的实例,使用其convertAndSend方法向指定地址发送消息。具体代码如下:

@Autowired
private SimpMessagingTemplate messagingTemplate;

public void sendMessage(String destination, Object message) {
    messagingTemplate.convertAndSend(destination, message);
}

在上述代码中,我们注入SimpMessagingTemplate类的实例messagingTemplate,并定义了一个sendMessage方法,用于向指定地址发送消息。

总结

SimpMessagingTemplate是Spring Framework中用于向WebSocket客户端发送消息的类,使用它可以实现WebSocket通信的消息发送功能。在Spring Boot应用程序中,可以通过WebSocket消息代理来实现WebSocket通信,使用SimpMessagingTemplate类可以方便地向WebSocket客户端发送消息。本文介绍了SimpMessagingTemplate的原理和使用方法,希望对读者有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GPT】中文大语言模型梳理与测评(C-Eval 、AGIEval、MMLU、SuperCLUE)

文章目录 概述申请后直接使用大模型开源可本地部署 通识数据集测评&#xff08;C-Eval 、AGIEval、MMLU、SuperCLUE&#xff09;自媒体报道SuperCLUE&#xff1a;中文通用大模型综合性基准C-Eval&#xff1a;中英测评&#xff08;清华上交提出&#xff09;当前排名&#xff08;…

Object counting——生成密度图density map

文章目录 过程代码参考 过程 首先构造一个和原始图片大小相同的矩阵&#xff0c;并将其全部置为0&#xff0c;然后将每个被标记的人头对应的位置置为1&#xff0c;这样就得到了一个只有0和1的矩阵&#xff0c;最后通过高斯核函数进行卷积得到一个连续的密度图。 代码 import…

如何对修改密码接口进行压测?终于找到解决办法了

做接口测试中&#xff0c;对于一般性的单业务接口测试很多工具可供选择&#xff0c;但是对于一些相关业务相关性的关联接口测试就比较麻烦&#xff0c;使用工具比如jmeter、postman、soapui等等就比较麻烦。我比较偏重脚本化执行测试用例&#xff0c;所以选择了groovy作为主要语…

JAVA选择题笔试:static成员与非static成员、父类子类方法的继承、接口与抽象类、final的使用

0、前言 本文针对一些java基础知识的一些考点做出解析。 1、静态成员 与 非静态成员 静态变量与静态方法都是静态成员。 先说静态变量与普通成员变量的区别&#xff0c;例如如下两个变量&#xff1a; public class Demo {public static String A "静态变量";publi…

迅镭激光高功率切割机成功交付招商重工,助推船舶行业智造升级!

近日&#xff0c;迅镭激光-招商重工高功率激光切割机交机仪式在招商局重工(江苏)有限公司顺利举行。 招商重工项目负责人佘刚林、孙宗宇&#xff0c;迅镭激光总经理助理刘富生、营销中心行业总监杨林等领导参加交付仪式&#xff0c;共同见证了这一激动人心的时刻。 本次交付的机…

日历组件 el-calendar 实现标记功能

需求&#xff1a;在日历组件中选择月份时&#xff0c;可以显示当月已经质检或需质检的数据 思路&#xff1a;前端每次点击日期选择器的时候调用接口&#xff0c;接口返回当月需要质检或已质检的数据&#xff0c;前端拿到数据就开始做判断然后回显。 大体样式 代码&#xff1a…

【每日一短语】给某人严重的惊吓

1、短语及释义 scare the pants off sb. 释义&#xff1a; 把某人的裤子吓掉&#xff1b;引申为严重的惊吓 2、示例及出处 美剧&#xff1a;《生活大爆炸》第八季第2集 The Big Bang Theory, Season 8 Episode 2 Leonard Hofstadter: I think the idea that someone could be …

【操作指南】EasyNTS上云网关如何删除日志?

EasyNTS上云网关主要包括两个部分&#xff1a;第一部分是软硬结合的EasyNTS上云网关设备。EasyNTS上云网关有单独的软件部分&#xff0c;具有拉转推功能&#xff0c;用户可集成部署在自己的硬件终端和业务系统中&#xff0c;也有软硬一体的硬件部分&#xff0c;根据需求直接配置…

CSS中伪元素详解和用法例子详解

文章目录 一、伪元素介绍二、::before和::after三、::first-line和::first-letter四、::selection五、::placeholder 一、伪元素介绍 伪元素&#xff1a;用于创建一些不在DOM树中的元素&#xff0c;并为其添加样式。 二、::before和::after ::before 伪元素可以用来创建一个…

浅谈 Android Tombstone(墓碑日志)分析步骤 - 02

tomestone 日志&#xff1a; *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: qti/trinket/trinket:11/RKQ1.211119.001/37:user/test-keys Revision: 0 ABI: arm Timestamp: 2023-06-19 23:47:310800 pid: 742, tid: 32482, name: CAM_M…

Spring Bean的生命周期解读

目录 1. Spring IOC容器 1.1 Spring IOC 容器的设计 1.1.1 BeanFactory 1.1.2 ApplicationContext 1.2 Spring Bean的生命周期 1.2.1 BeanDefinition 1.2.2 InstantiationAwareBeanPostProcessor和BeanPostProcessor 1.2.3 测试生命周期 1. Spring IOC容器 1.1 Spring …

【前端工程化】深入浅出vite(一)--vite的优点及原理、性能优化

Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 背景 webpack支持多种模块化&#xff0c;将不同模块的依赖关系构建成依赖图来进行…

帮助中心对企业有用吗?

帮助中心一般是指产品的说明或者使用帮助&#xff0c;客户在利用一些网站的功能或者服务时往往会遇到一些看似很简单&#xff0c;但不经过说明可能很难搞清楚的问题&#xff0c;企业有时甚至会因为这些细节问题的影响而失去用户&#xff0c;其实在很多情况下&#xff0c;只要经…

如何添加mathtype到往word菜单?

mathtype6.9安装完事&#xff0c;总是不在word中显示菜单&#xff0c;网上搜了好几个教程&#xff0c;步骤各不相同&#xff0c;索性自己试了一遍&#xff0c;整理了下关键步骤&#xff0c;做个备份&#xff0c;下次直接看自己的经验&#xff01; 把math type安装目录中&#…

MySQL中常用工具

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

LeetCode 15.三数之和

文章目录 题目描述解题思路代码 题目描述 链接&#xff1a;https://leetcode.cn/problems/3sum 解题思路 排序 双指针 注意点&#xff1a;去重 代码 public IList<IList<int>> ThreeSum(int[] nums) {// 结果数组List<IList<int>> result new Li…

Nacos 2.x版本 配置中心和服务注册与发现 源码解析

一、配置中心源码解析 1.首先找到nacos读取配置的入口 1&#xff09;找到nacos-config包下的spring.factories中的NacosConfigBootstrapConfiguration 2&#xff09;NacosConfigBootstrapConfiguration会做两件事情&#xff0c;加载完成两个bean&#xff0c;一个是NacosConfi…

2023品牌新媒体矩阵营销洞察报告:流量内卷下,如何寻找增长新引擎?

近年来&#xff0c;随着移动互联网的发展渗透&#xff0c;短视频、直播的兴起&#xff0c;新消费/新零售、兴趣电商/社交电商等的驱动下&#xff0c;布局线上渠道已成为绝大多数品牌的必然选择。 2022年&#xff0c;越来越多的品牌加入到自运营、自播的行列中&#xff0c;并且…

【线性代数】快速复习笔记

线性代数快速复习 行列式行列式的基础计算某行&#xff08;列加上或减去另一行&#xff08;列的几倍&#xff0c;行列式不变某行列乘k,等于k乘此行列式互换两行列&#xff0c;行列式变号 行列式的性质1 主对角线是X&#xff0c;其余是其他常数a2 范德蒙德行列式3 行列式加减法4…

Linux中安装配置启动Redis

Linux中安装配置启动Redis 一、下载redis 使用命令下载&#xff1a; wget https://download.redis.io/releases/redis-6.0.10.tar.gzls du sh redis-6.0.10.tar.gz解压 [rootnode02 ~]# tar xzf redis-6.0.10.tar.gz [rootnode02 ~]# cd redis-6.0.10 [rootnode02 redis-6.…