(十九)springboot实战——springboot集成redis实现消息的订阅与发布

这篇具有很好参考价值的文章主要介绍了(十九)springboot实战——springboot集成redis实现消息的订阅与发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言 

本节内容主要介绍springboot项目通过集成redis,如何利用redis的订阅发布机制,完成系统消息的发布与订阅功能。Redis中的发布与订阅是一种消息通信模式,允许发送者(发布者)将消息发送给多个接收者(订阅者)。在 Redis中,发布与订阅通过PUBLISH和SUBSCRIBE命令实现。频道(Channel):频道是消息的通道,用于区分不同类型或主题的消息。订阅者可以选择订阅感兴趣的频道,以接收相应的消息。Redis的发布与订阅模式是无状态的,即发布者在发送消息之后不需要关心是否有订阅者接收到消息,也不需要维护订阅者的信息。当发布者向某个频道发布消息时,所有订阅了该频道的订阅者都会接收到相同的消息。这种机制使得消息的发布者和订阅者之间能够实现解耦,并支持一对多的消息传递方式,即广播形式。

正文

①创建一个web项目,引入redis启动器的pom依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

② 在application.yml中添加redis的配置

(十九)springboot实战——springboot集成redis实现消息的订阅与发布,# springboot,spring boot

③创建redis的配置类, 初始化redis工具类RedisTemplate和redis订阅消息的监听容器RedisMessageListenerContainer

package com.yundi.atp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


@Configuration
public class RedisConfig {
    /**
     * 初始化一个Redis消息监听容器
     * @param connectionFactory
     * @return
     */
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        // 添加其他配置,如线程池大小等
        return container;
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

 ④创建redis消息频道的常量

package com.yundi.atp.constant;


public class ChannelConstant {
    /**
     * 广播通道
     */
    public static final String CHANNEL_GLOBAL_NAME = "channel-global";

    /**
     * 单播通道
     */
    public static final String CHANNEL_SINGLE_NAME = "channel-single";
}

⑤ 创建一个http请求,用于发布基于redis的消息供客户端订阅

package com.yundi.atp.controller;

import com.yundi.atp.constant.ChannelConstant;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


@RequestMapping(value = "base")
@RestController
public class BaseController {
    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 发布广播消息
     *
     * @param msg
     */
    @GetMapping(value = "/publish/{msg}")
    public void sendMsg(@PathVariable(value = "msg") String msg) {
        redisTemplate.convertAndSend(ChannelConstant.CHANNEL_GLOBAL_NAME, msg);
    }
}

⑥ 创建一个消息订阅者,实现MessageListener接口,通过重写onMessage方法订阅消息

package com.yundi.atp.listen;

import com.yundi.atp.constant.ChannelConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;


@Slf4j
@Component
public class RedisMessageSubscriber implements MessageListener {
    @Autowired
    private RedisMessageListenerContainer redisMessageListenerContainer;

    /**
     * 订阅消息:将订阅者添加到指定的频道
     */
    @PostConstruct
    public void subscribeToChannel() {
        //广播消息
        redisMessageListenerContainer.addMessageListener(this, new ChannelTopic(ChannelConstant.CHANNEL_GLOBAL_NAME));
    }

    @Override
    public void onMessage(Message message, byte[] bytes) {
        String channel = new String(message.getChannel(), StandardCharsets.UTF_8);
        String messageBody = new String(message.getBody(), StandardCharsets.UTF_8);
        log.info("Received message: " + messageBody + " from channel: " + channel);
    }
}

 ⑦启动项目,通过http请求发布消息,查看是否能够订阅成功消息

(十九)springboot实战——springboot集成redis实现消息的订阅与发布,# springboot,spring boot

⑧开启redis客户端测试,同样能够订阅到消息,证明redis的消息的订阅与发布是无状态的且是广播模式

(十九)springboot实战——springboot集成redis实现消息的订阅与发布,# springboot,spring boot 

结语

关于springboot集成redis实现消息的订阅与发布的内容到这里就结束了,我们下期见。。。。。。文章来源地址https://www.toymoban.com/news/detail-833382.html

到了这里,关于(十九)springboot实战——springboot集成redis实现消息的订阅与发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

    1.1 什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。 MQTT最大优点在于用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息

    2024年02月10日
    浏览(37)
  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

    1.1 什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。 MQTT最大优点在于用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息

    2024年02月10日
    浏览(43)
  • Redis 消息队列和发布订阅

    采用redis 三种方案: ● 生产者消费者:一个消息只能有一个消费者 ● 发布者订阅者:一个消息可以被多个消费者收到 ● stream模式:实现队列和广播模式 Producer调用redis的lpush往特定key里放消息,Consumer调用brpop去不断监听key。 1、利用redis的链表,存储数据,实现队列模式

    2024年01月18日
    浏览(43)
  • Redis消息传递:发布订阅模式详解

    目录 1.Redis发布订阅简介 2.发布/订阅使用    2.1 基于频道(Channel)的发布/订阅    2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制    3.1 基于频道(Channel)的发布/订阅如何实现的?    3.2 基于模式(Pattern)的发布/订阅如何实现的?    3.3 SpringBoot结合Redis发布

    2024年02月12日
    浏览(45)
  • 【Spring Boot 3】【Redis】消息发布及订阅

    软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时

    2024年01月21日
    浏览(50)
  • 一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布&MQTT 客户端重连

    简介: 之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT? 之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用

    2024年02月05日
    浏览(46)
  • 【PHP面试题80】Redis消息发布与订阅功能怎么用的?

    本文已收录于PHP全栈系列专栏:PHP面试专区。做全网最全最有营养的PHP面试大全。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 Redis消息发布与订阅是Redis提供的一种消息传递机制,它允许一个或多个生产者通过发布消息的

    2024年02月16日
    浏览(55)
  • Spring Boot进阶(62):Redis魔法:用发布订阅功能打造高效消息队列!

            话说,玩过MQ的同学可能都知道【发布订阅】模式,不就是一种消息传递方式嘛;如果没玩过,那也不打紧,下文我会简单做个科普。但是对于Redis如何实现MQ的【发布订阅】功能?这才是问题的关键,有的同学就说“压根没玩过呀!不造” ,哈哈,bug菌既然敢写便有

    2024年02月09日
    浏览(49)
  • React从入门到实战-react脚手架,消息订阅与发布

    创建项目并启动 全局安装 npm install -g create-react-app 切换到想创建项目的目录,使用命令:create-react-app 项目名称 ​ cd 项目文件夹, npm start 启动项目 创建项目遇到的问题 create-react-app : 无法加载文件 ​ 解决办法: 1.以管理员身份打开windows PowerShell 2.输入set-ExecutionPolicy Remote

    2024年02月15日
    浏览(60)
  • Spring Boot进阶(48):【实战教程】SpringBoot集成WebSocket轻松实现实时消息推送

            WebSocket是一种新型的通信协议,它可以在客户端与服务器端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。在SpringBoot应用中,集成WebSocket可以方便地实现实时通信功能,如即时聊天、实时数据传输等。         本文将介绍如何在Sprin

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包