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(通道)来完成。
此处不再介绍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 你好,陌生人!
控制台打印出:
@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. 应用场景- 消息广播,所有订阅了通道的监听者均能获得消息消息群发,群发消息给系统登录用户…
更多官方文档请参考https://docs.spring.io/spring-data/redis/docs/2.4.15/reference/html/#pubsub。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)