首页 > 解决方案 > 使用 Java 弹簧的 Redis Pub/Sub

问题描述

我使用 Java 创建具有单个主题和单个侦听器的 Redis Pub/Sub,例如谢谢:

那是我在 MvcConfigurer 中的 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 类用于 MvcConfigurer

public class RedisMsgHandler implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] bytes) {
   //impl goes here
    }
} 

我的主要目标是创建多个主题和多个侦听器,例如 RedisMsgHandler,请让我知道该怎么做。

我对创建大量在 MessageListener 上实现的类以及为每个主题创建大量 bean 感到不舒服

标签: javaspringredispublish-subscribe

解决方案


设法修复它:

@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;
}

推荐阅读