1 RedissonClient配置类编写,这里用的单机模式,方便测试

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
 
@Configuration
public class RedissonClientConfig {
 
    @Bean
    public RedissonClient getredissonclient() {
        Config config = new Config();
        //这里用的单机模式,方便测试
        config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456");
 
        RedissonClient redissonClient = Redisson.create(config);
 
        return redissonClient;
    }
 
}

2 生产者发送消息

@Autowired
private RedissonClient redissonClient;

@RequestMapping("/addBook")
public R addBook()
{ 
    RTopic topic = redissonClient.getTopic("redis_mail_topic_key");
    long publish = topic.publish(String.valueOf(new Random().nextInt(500)));
    return success(publish);
}

3 消费者,可以启动多个,都会收到topic的消息

import cn.haiwang.pojo.resp.changliang.ChangLiang_1;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.api.listener.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

@Component
public class Run_2 implements ApplicationRunner, Ordered {

    @Autowired
    private RedissonClient redissonClient;

    @Override
    public void run(ApplicationArguments args) throws Exception {

        RTopic topic = redissonClient.getTopic("redis_mail_topic_key");

        topic.addListener(String.class, new MessageListener<String>() {
            @Override
            public void onMessage(CharSequence charSequence, String s) {
                System.err.println("收到消息:" + s);
            }
        });

    }

    @Override
    public int getOrder() {
        return 1;
    }
}

坑:
测试发送string可以跑通,pojo无法监听到消息,
另外maven 依赖中redisson 3.8.2版本的RTopic是支持范型的,发送监听pojo很容易,
高版本的反而去掉了,所以高版本的发送监听pojo还没有跑通(暂用转json方式)。

更多推荐