基于redisson-Topic实现发布订阅功能
·
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方式)。
更多推荐


所有评论(0)