Springboot中使用Redis的发布/订阅模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/he37176427/article/details/84973508

redis的发布订阅模式,使发布者和订阅者完全解耦 

首先项目依赖和配置文件

pom.xml 引入redis依赖    application.properties略

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

首先订阅者需要自己实现具体操作方法,并注册为bean

@Component
public class Recv(){
    public void recvMsg(String msg){ //具体操作方法 名称随意
        System.out.println("收到消息:"+msg);
    }
}

然后需要一个 RedisMessageListenerContainer监听容器来将订阅者与指定频道绑定

@Configuration
public class RedisConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
        MessageListenerAdapter recvAdapter) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            container.addMessageListener(recvAdapter, new PatternTopic("channel1"));//将订阅者1与channel1频道绑定
            return container;
    }
    @Bean
    MessageListenerAdapter recvAdapter(Recv receiver){ //与channel1绑定的适配器
        return new MessageListenerAdapter(receiver, "recvMsg");/*收到消息时执行Recv类中的        
                                                                 recvMsg方法*/
    }

    @Bean
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }
}

这样,频道和订阅者 订阅者处理数据的方法就绑定好了,接下来向指定频道中发送数据时,订阅这个频道的所有client都会收到消息并执行绑定的方法。

@Componet
public class Sender(){
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /*当这个方法被调用时,将会发布消息到channel1 然后订阅者执行对应的方法
    这里就会在控制台打印hello world*/
    public void send(){
        stringRedisTemplate.convertAndSend("channel1","hello world");
    }
}

猜你喜欢

转载自blog.csdn.net/he37176427/article/details/84973508