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

Spring Boot 使用Redis发布订阅模式处理消息,第1张

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。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5719542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存