SpringBoot学习(六)连接Redis收发消息

我们会做什么?

SpringBoot学习(六)连接Redis收发消息_第1张图片

第一步:安装个Redis

这一步也不难,直接搜索Redis,然后从官网进入github连接,下载系统对应的版本,在这里要注意官网上只有Linux版本的,分辨方法:.tar.gz基本上是linux,而zip是win的。
我的是win,但是今年开始国内进不去github了,很蛋疼,幸好百度找了个网盘,下载了一个版本

在这里插入图片描述
直接解压,也不用安装
SpringBoot学习(六)连接Redis收发消息_第2张图片
双击server.exe就看到下边这个黑框,证明启动成功,接下来就不管它了,弄spring。
SpringBoot学习(六)连接Redis收发消息_第3张图片

第二步:创建工程

这一步和之前相同,但是多了一个依赖

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

如果依赖下载有问题,就指定版本,具体找版本的方法我在之前的博客里记录了。

依赖安装没问题之后,当然是设计一个监听消息的类Receiver

package com.springboot.second.redistest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.atomic.AtomicInteger;

public class Receiver {
     
    private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);

    private AtomicInteger counter = new AtomicInteger();

    public void receiveMessage(String message){
     
        LOGGER.info("Received <" + message + ">");
        counter.incrementAndGet();
    }

    public int getCount(){
     
        return counter.get();
    }
}

主文件
首先注解一个Bean,RedisMessageListenerContainer,它是用来连接并监听适配Redis的类实例,在这里也印证了前文中学习时提到的@Bean知识,是类的一种,但又进行过实例化,因为它返回的一定是类实例。
在这里我不太懂**PatternTopic(“chat”)的意思,可能是但从下文中convertAndSend(“chat”, “Hello From Redis!”)**猜测,可能是发送键值对,监听键为chat的值,但这也只是猜测。

@Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter){
     
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

        return container;
    }

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

    @Bean
    Receiver receiver(){
     
        return new Receiver();
    }

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

    public static void main(String[] args) throws InterruptedException {
     
        ApplicationContext ctx =  SpringApplication.run(Application.class, args);

        StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);

        Receiver receiver = ctx.getBean(Receiver.class);

        while (receiver.getCount() == 0 ) {
     
            log.info("Sending message...");
            template.convertAndSend("chat", "Hello From Redis!");
            template.convertAndSend("chat", "Hello From Redis2!");
            Thread.sleep(500L);
        }

//        System.exit(0);
    }

我注释了exit命令,保证运行完之后不退出。

结果

运行代码之后,可以看到成功给redis发送了消息,
SpringBoot学习(六)连接Redis收发消息_第4张图片
为了弄清楚topic的流程,好不容易找到了redis topic相关的知识网站topic订阅和发布
SpringBoot学习(六)连接Redis收发消息_第5张图片
于是我同样订阅自己的chat,看到了一下信息SpringBoot学习(六)连接Redis收发消息_第6张图片
再去其官网,发现每个订阅的信息回复是3个值的数组,其中第一个值是消息的种类:有subscribe、unsubscribe和message三种,每一种里3个值的含义都不同,具体见下图。
SpringBoot学习(六)连接Redis收发消息_第7张图片
本文中类型是message,这是启动project,看到回复了message类的消息,内容是我写的Hello From Redis!

SpringBoot学习(六)连接Redis收发消息_第8张图片
OK,学习结束。

最后还有一个类ApplicationContext没有学习,后续补上。

完结撒花

你可能感兴趣的:(spring,boot,redis,java,spring,boot)