栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot 使用Redis发布订阅模式处理消息

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 使用Redis发布订阅模式处理消息

Spring Boot 使用Redis发布订阅模式

1. Redis发布订阅模式2. Spring Boot中订阅消息

2.1 Redis监听器容器配置2.2 创建通道监听器2.3 测试订阅功能 3. 借助RedisTemplate发布消息4. 应用场景5. 更多参考文档

1. Redis发布订阅模式

自Redis 2.0.0起支持消息的发布订阅模式,命令行语法:

PUBLISH channel massage

Redis中的发布订阅模式中数据的流动基于channel(通道)来完成。

2. Spring Boot中订阅消息

此处不再介绍Spring Boot与Redis的整合,可以参考 Spring Data Redis。

2.1 Redis监听器容器配置
@Configuration
public class RedisConfig {
	 @Bean
	 public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory factory){
	     RedisMessageListenerContainer container = new RedisMessageListenerContainer();
	     container.setConnectionFactory(factory);
	     return container;
	 }
 }
2.2 创建通道监听器

test通道监听器:

@Component
public class TestRedisSubListener implements MessageListener {

    public TestRedisSubListener(RedisMessageListenerContainer listenerContainer) {
        listenerContainer.addMessageListener(this, new ChannelTopic("test"));
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println(getClass().getName() + ":" + "channel:" + new String(pattern) + ":" + message.toString());
        System.out.println();
    }
}

上边创建了“test”通道的监听器,当有消息发布到通道时,onMessage方法被自动回调。

test1通道监听器:

@Component
public class Test1RedisSubListener implements MessageListener {

    public Test1RedisSubListener(RedisMessageListenerContainer listenerContainer) {
        listenerContainer.addMessageListener(this, new ChannelTopic("test1"));
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println(getClass().getName() + ":" + "channel:" + new String(pattern) + ":" + message.toString());
        System.out.println();
    }
}

两个通道的消息互不影响!

2.3 测试订阅功能

在redis命令行发布消息:

PUBLISH test 123432423423423432423
PUBLISH test 你好世界!
PUBLISH test1 你好,陌生人!

控制台打印出:

3. 借助RedisTemplate发布消息
@Component
public class TestChannelMessagePublisher {
    private final RedisTemplate redisTemplate;

    public TestChannelMessagePublisher(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void pubshlishMessage(String mess) {
        redisTemplate.convertAndSend("test", mess);
    }
}

在业务处直接注入该类,然后调用pubshlishMessage方法即可向test通道发布消息。

4. 应用场景
    消息广播,所有订阅了通道的监听者均能获得消息消息群发,群发消息给系统登录用户…
5. 更多参考文档

更多官方文档请参考https://docs.spring.io/spring-data/redis/docs/2.4.15/reference/html/#pubsub。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号