SpringBoot如何使用Redis订阅消息

原来都是直接用的Jedis来实习消息的发布与订阅,要写不少东西,而这次刚好开了一个SpringBoot的新项目,所以想直接使用starter中的redis来实现一下,网上搜了很多,结果发现都长的一样。。。可是都满足不了我的需求,我需要在接收到消息的时候,判断是哪一个channel发来的而调用对应的方法,下面来看一下具体的使用方法。

首先我们需要创建两个Bean,一个用来订阅频道,一个用来调用消息接收的方法

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        // 订阅频道
        container.addMessageListener(listenerAdapter, new PatternTopic("course_lesson_report"));
        container.addMessageListener(listenerAdapter, new PatternTopic("course_phase_report"));
        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

下面看一下传入的MessageReceiver

@Component
@Slf4j
public class MessageReceiver {

    public void receiveMessage(String message, String channel) {
        log.info(channel + " 收到消息: " + message);
    }
}

经过尝试,发现第一个参数是消息内容,第二个参数是channel。

下面写一个单元测试测试一下

@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class BaseTest {

    @Resource(name = "stringRedisTemplate")
    private StringRedisTemplate redisTemplate;

    @Test
    public void test() throws InterruptedException {
        redisTemplate.convertAndSend("course_lesson_report", "测试");
        Thread.sleep(100);
    }
}
结果

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 132,640评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 12,108评论 0 15
  • 第七天 爱的力量 1 今天是第七天了,还好,我坚持下来了。 今天想说“情绪”。人的情绪常常会变化无常,前一秒是太阳...
    周利平Amily阅读 323评论 0 0
  • 回忆(一) “完了,完了。”厉影汐小声嘀咕着。都两年了,她始终忘不了曾经那个为她不顾一切的唐萧。 两年前,也就是唐...
    易雪恋阅读 269评论 0 3
  • 天干物燥,人人心中一把火的季节又要到了,每天都有各种朋友、家人、患者逼问我上火了怎么办?为什么会上火?自己上的火是...
    孙蛋蛋阅读 974评论 11 14