
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条)