轻量级消息发布订阅:Redis的适用场景

系统运维2025-11-05 07:04:27856

前言

在实际项目中,轻量某些业务场景需要使用消息的消景发布订阅功能来实现特殊需求。虽然常见的布订消息中间件如 RabbitMQ、Kafka 和 ActiveMQ 等提供了强大的阅R用场消息处理能力,但它们通常被认为是轻量较为“重量级”的解决方案,使用成本较高。消景在一些业务场景中,布订我们只需要实现消息的阅R用场发布订阅功能,并不需要保证消息的轻量绝对可靠性和高性能要求。此时,亿华云消景使用 Redis 作为消息中间件无疑是布订更好的选择。

项目如何搭建略过,阅R用场可以使用 Spring Initializr 或者其他 IDEA 创建一个新的轻量 Spring Boot 项目,并添加相关依赖即可

轻量级消息发布订阅:Redis的适用场景

创建 Redis 消息发布者

创建一个服务类用于发布消息:

复制@Service public class RedisPublisherService { @Autowired private RedisTemplate redisTemplate; public void publishMessage(String channel,消景 String message) { redisTemplate.convertAndSend(channel, message); } }1.2.3.4.5.6.7.8.9.10.

创建 Redis 消息订阅者

创建一个服务类用于监听消息:

复制/** * Redis 消息订阅-消息监听器,当收到阅订的布订消息时,会将消息交给这个类处理 * 可以直接实现 MessageListener 接口,也可以继承它的实现类 MessageListenerAdapter * 自动多线程处理 */ @Service public class RedisSubscriberService implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { String channel = message.getChannel().toString(); String data = new String(message.getBody()); System.out.println("Received message from channel " + channel + ": " + data); } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.

消息监听器绑定监听指定通道

复制/** * 自定义 RedisTemplate 序列化方式 * 配置主题订阅 - Redis消息监听器绑定监听指定通道 */ @Configuration public class RedisConfig { // 自定义的消息订阅监听器 @Resource private RedisSubscriberService redisSubscriberService; /** * 自定义 RedisTemplate 序列化方式 * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); //绑定 RedisConnectionFactory redisTemplate.setConnectionFactory(redisConnectionFactory); //创建 Jackson2JsonRedisSerializer 序列方式,对象类型使用 Object 类型, Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(new LaissezFaireSubTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置 RedisTemplate 序列化规则,因为 key 通常是普通的免费信息发布网字符串,所以使用StringRedisSerializer即可,而 value 是对象时,才需要使用序列化与反序列化。 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash key 序列化规则 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); //属性设置后操作 redisTemplate.afterPropertiesSet(); return redisTemplate; } /** * 配置主题订阅 * 可以添加多个监听器,监听多个通道,只需要将消息监听器与订阅的通道/主题绑定即可。 * addMessageListener(MessageListener listener, Collection<? extends Topic> topics):将消息监听器与多个订阅的通道/主题绑定 * addMessageListener(MessageListener listener, Topic topic):将消息监听器与订阅的通道/主题绑定 * @param connectionFactory * @return */ @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); // 设置连接工厂,RedisConnectionFactory 可以直接从容器中取,也可以从 RedisTemplate 中取 container.setConnectionFactory(connectionFactory); // 订阅名称叫test-channel的通道, 类似 Redis 中的subscribe命令 container.addMessageListener(redisSubscriberService, new ChannelTopic("test-channel")); // 订阅名称以 user- 开头的全部通道, 类似 Redis 的WordPress模板 pSubscribe 命令 container.addMessageListener(redisSubscriberService, new PatternTopic("user-*")); return container; } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.

测试发布与订阅

创建一个测试类来测试发布和订阅功能:

复制@Component public class RedisTestRunner implements CommandLineRunner { @Autowired private RedisPublisherService publisherService; @Autowired private RedisSubscriberService subscriberService; @Override public void run(String... args) throws Exception { // 发布消息 publisherService.publishMessage("test-channel", "Hello, yian!"); publisherService.publishMessage("user-channel", "Hello, weilai!"); } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.

本文地址:http://www.bzve.cn/html/587f3899374.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

电脑开机报0164错误解决办法(解决电脑开机报0164错误的简单方法)

使用U盘安装Win7系统64位教程(详细步骤图文指南,让你轻松安装Win7系统)

「探索剪辑软件世界(「解锁创造力的利器,满足你所有视频剪辑需求」)

探究SKG按摩披肩的舒适度和效果(颈肩舒缓、舒适体验,SKG按摩披肩为你带来全新按摩体验)

飞利浦SHB6250音质的真实评价(揭秘SHB6250的音质表现,解锁你的音乐世界)

从Windows10回到XP系统(一键回归经典)

手机内存越用越小,如何清理?(保持手机内存清爽,尽享流畅体验)

龙斗士xk封包教程(从零开始,轻松打造属于你的游戏体验)

友情链接

滇ICP备2023006006号-39