Spring Boot 集成 Redis 发布订阅实现消息通信
在分布式系统中,服务间的通信是一个常见需求。Redis 作为一款高性能的内存数据库,提供了发布订阅(Pub/Sub)功能,可用于实现简单高效的消息通信。本文将结合实际代码案例,详细介绍如何在 Spring Boot 项目中集成 Redis 发布订阅功能。
Redis 发布订阅简介
Redis 发布订阅是一种消息通信模式:
- 发布者(Publisher):发送消息的一方,将消息发布到指定主题(Topic)
- 订阅者(Subscriber):接收消息的一方,订阅感兴趣的主题
- 主题(Topic):消息的分类标识,发布者按主题发送,订阅者按主题接收
这种模式的优势在于解耦了消息的发送者和接收者,双方无需知道对方的存在,只需关注消息本身。
项目实战:实现 Redis 发布订阅
消息发布实现
发布消息非常简单,通过 RedisTemplate 的 convertAndSend 方法即可:
// 发布消息到指定主题
redisTemplate.convertAndSend(GlobalConstants.MATERIAL_TO_UPGRADE_TOPIC, materialInfoVO);
- 第一个参数:主题名称(GlobalConstants.MATERIAL_TO_UPGRADE_TOPIC)
- 第二个参数:要发送的消息对象(materialInfoVO)
订阅端配置
订阅端需要进行相应配置才能接收消息,主要包括监听器容器、消息适配器和消息处理器。
Redis 订阅配置类
package com.abupdate.vota.upgrade.config;import com.abupdate.vota.upgrade.constant.PackageConstant;
import com.abupdate.vota.upgrade.listener.MessageReceive;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;/*** <p> redis 发布订阅配置类</p>** @author bu.junjie* @version 1.0.0* @createTime 2023-08-04 10:50*/
@Configuration
public class RedisSubscribeConfig {/*** redis消息监听器容器* 可以添加多个监听不同话题的redis监听器,通过反射调用消息订阅处理器的方法** @param connectionFactory Redis连接工厂* @param listenerAdapter 消息监听器适配器* @return RedisMessageListenerContainer*/@Beanpublic RedisMessageListenerCo