使用JavaSpring的Redis发布/订阅

使用JavaSpring的Redis发布/订阅,java,spring,redis,publish-subscribe,Java,Spring,Redis,Publish Subscribe,我创建了Redis Pub/Sub,其中包含一个主题和一个监听器,使用类似Java的thank: 这是我在MVCConfiguer中的bean: @Bean MessageListenerAdapter messageListener() { return new MessageListenerAdapter(redisMsgHandler); } @Bean public RedisMessageListenerContainer redisM

我创建了Redis Pub/Sub,其中包含一个主题和一个监听器,使用类似Java的thank:

这是我在MVCConfiguer中的bean:

@Bean
    MessageListenerAdapter messageListener() {
        return new MessageListenerAdapter(redisMsgHandler);
    }

    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer mlc = new RedisMessageListenerContainer();
        mlc.setConnectionFactory(lettuceConnectionFactory());
        mlc.addMessageListener(messageListener(), topic());
        return mlc;
    }

    @Bean
    ChannelTopic topic() {
        return new ChannelTopic("pubsub:queue");
    }
这就是我收到消息的地方,请不要使用这个RedisMsghandler类来配置MVCConfigure

public class RedisMsgHandler implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] bytes) {
   //impl goes here
    }
} 
我的主要目标是像RedisMsgHandler一样创建多个主题和多个听众,请让我知道如何做


我不喜欢创建大量在MessageListener上实现的类,也不喜欢为每个主题创建大量bean

@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {
    RedisMessageListenerContainer mlc = new RedisMessageListenerContainer();

    mlc.setConnectionFactory(lettuceConnectionFactory());
    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandler), 
                           new ChannelTopic("pubsub:queue");


    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandlerAnother), 
                           new ChannelTopic("pubsub:Otherqueue");

    return mlc;
}

我想这样解决它:

@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {
    RedisMessageListenerContainer mlc = new RedisMessageListenerContainer();

    mlc.setConnectionFactory(lettuceConnectionFactory());
    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandler), 
                           new ChannelTopic("pubsub:queue");


    mlc.addMessageListener(new MessageListenerAdapter(redisMsgHandlerAnother), 
                           new ChannelTopic("pubsub:Otherqueue");

    return mlc;
}